小見一平、Salesforce、Einstien Analytics Specialist.
前回のブログでは、Einstein Discoveryのモデルの良し悪しを見る方法を学びました。今回は更に一歩突っ込んでモデルを良くする方法を学びます。スコアを良くすると言ってもただ単に数値を上げる(前回習ったRスクエアやMAEですね!)だけではなく、解釈しやすい説明を提供できているかなどビジネスユーザーの視点まで考慮したチューニングが必要になってきます。内容的には高度な統計的用語などが出てきて難解かもしれませんが、一つ上のEinstein Discoveryマスターを目指すあなたに是非読んでいただきたく今回Olfaの記事第2弾を超訳させていただきました。
原題:Take your Einstein Discovery model from Good to Great
原題著者:Olfa Kharrat, Senior Solution Engineer, Einstein Analytics and AI (Linkedin)
Einstein Discoveryにより、ビジネスユーザーは業務で使う環境にAIやダッシュボードなどの拡張分析を組み込めるようになります。予測モデルは「コーディングを伴わないAIによるアプローチ」を用いてSalesforceプラットフォーム上に作成され、モデルを訓練するためのアルゴリズムはEinstein Discoveryにより自動的に生成されるので、上級開発者やデータサイエンティストがコーディングする必要はありません。このプラットフォームを最大限に活用するためには、データの理解を深め、モデルの結果を解釈し、トレーニングデータセットを適切な方法で構成する必要があります。したがって、ビジネス知識とデータ分析は、適切な予測を行うために適切な入力データを選択するだけでなく、最適な品質を持つモデルを作成するための鍵となります。
このブログの目的は、よりよいモデルを作るためのいくつかの実践方法を解説し、以下のような関連する質問に答えることです。
この記事では、予測モデルの品質を評価する指標を十分に理解していることを前提としています。その知識をブラッシュアップする必要がある場合は、私の以前のブログをお読みください。
正しいモデル構築への第一歩は、正しいビジネスの質問をすることです。以下の事をお尋ねすることをお勧めします。
質問1: 出力(目的)変数の主な予測因子は?
例えば、商談が成約するまでの確率を予測するには、商談に関わる活動を見てみるのも面白いかもしれません。しかし、特徴量としての活動数だけではなく、どのような行動をしたのかという詳細も含めて記載したほうがいいのでしょうか。電話よりも対面での会議の方が成約予測に深い影響を与える場合、2つの入力変数を持ったほうが良いでしょう。データセットの中では、すべての活動を一つの列にまとめるのではなく、’電話の数’と’対面でのミーティングの数’を2つの異なる入力列として使用してください。また、派生したカラムを使ってよりよいモデルを作りこともできます。派生特徴量とは、他のデータから計算または変換によって派生した入力列です。例えば、商談が成約するかどうかの可能性を予測する場合、取引先ごとの商談成約数を反映したスコアを計算したり、対応する業界の製品セグメントごとの勝利率を計算したりするのは面白いかもしれません。より強力な予測因子が質の高い予測と信頼できる(分かりやすい)説明をしてくれます。
質問2: モデルの出力(=予測)として必要なビジネスに立脚した説明とは?
考えられる要因を変数としてモデルに含めることが重要です。引き続き、商談成約の予測例を見ていきましょう。企業が、差別化要因を反映した製品を提供するために、アドオンに関する推奨ガイダンスを必要としているとします。入力変数としてアドオンの種類を追加すれば、その推奨を提言することができます。この入力変数は、有力な製品とベストな組み合わせを商談に提供します。他の製品やソリューションと同様に、Einstein Discoveryを導入するには、企業のビジネスを深く理解する必要があります。
序文で述べたように、異なるデータセグメントに対して異なるモデルを持つことで、予測品質を向上させることができます。しかし、この改善の可能性を探るべき時期はいつでしょうか?この問いにはジレンマが隠されています。1つのモデルを持つことで、より多くのデータを持つことができるので、あるデータセグメントを他のデータセグメントの振る舞いから学習させることができます。例えば、ある商品のドイツでの売上数量を知ることで、フランスでのデータポイントが不足している場合に、フランスでの推定に役立ちます。しかし、データセグメント(つまり、ドイツとフランス)間で非常に異なる行動が取られる場合、不必要な複雑さを生み出す可能性があります。セグメンテーションをスコアの改善に提要するためには3つのステップが必要です。
ステップ1 – 最初のステップは概念的なものです。データセットをビジネス的に理解することで、非常に異なる行動をとるセグメントを分離するのに役立ちます。例えば、商談の勝率を予測しているのであれば、エンタープライズビジネスセグメントの商談モデルと、中小企業セグメントの商談モデルを別々に持つことは理にかなっているかもしれません。
実際、ビジネス知識によって、商談モデルは全く異なる方法で活用されます。
ステップ2 – さて、あなたが上記のステップ1思考プロセスを行ったと仮定してみましょう。しかし、複数のモデルに分解する方法を決定するために、すべてのデータの謎を解き明かしたかどうかはまだよくわかりません。
ステップ2では、入力変数の分布を把握して次のことを検出します。
ステップ3 – 最後のステップは、まずは一つモデルを構築し、然る後適切なモデル数で終わるようにしていくことです。モデルを作るたびに以下のことを考慮しましょう。
セグメンテーションを行うことで、短期間で成果を上げることができます。しっかりとしたビジネス理解に基づいて行うと、より効率的です。セグメンテーションは、Einstein Discoveryのサイジング制限のためにも必要であり、これは次のセクションで見ていくことになります。
Einstein Discoveryでモデルを構築する際に考えなければならない重要な制限が2つあります。
では、解決策は何でしょうか?もしそれらすべての異なる値を持つ必要がある場合、多くの異なる値を持つ変数が再び100以下の異なる値を含むことを確認するために、より低い粒度レベルを持つ変数の値に基づいて、異なるモデルにセグメント化することを助言します。ここに例を示します。
ユースケースの目的:SKUや店舗ごとの売上数量値を予測する。
データセットの説明:異なるSKUセグメントとそのSKUに対し、週と店舗ごとの売上数量値を持っています。14種類のSKUセグメントがあり、それぞれのセグメントは20種類前後のSKUを持っています。まず、すべてのSKUに対してモデルを作成・実行しました。その結果、以下のような評価指標値を持つモデルができました。
行の27%が “その他 “カテゴリに移動しました。また、下のオレンジ色のボックスで見ることができるように、SKUの出力変数との相関は50%です。
その後、SKUファミリーを入力(SKU列なし)にして試してみましたが、品質が落ちてしまったので、SKUレベルまで取り込む必要があります。
その後、1つのSKUファミリーと80SKUだけを含むデータからなるサブセットを使ってモデルを構築しました。これにより、学習データセットのサイズが260kレコードのデータセットから30kレコードだけに縮小されたにもかかわらず、モデルの指標値は大幅に改善されました。
上記の例は、サイジングはEinstein Discoveryによる予測を理解する上で重要な考慮事項であることをうまく説明しています。データセットのサイズを十分に調査することで、この限界に対応するために異なるモデルに分割する必要があるかどうかについて、最初から適切な選択をすることができます。
(訳者注:将来的には、この列値が頻度の大きい99値までしか考慮されないという制限は緩和される方向で計画されています。)
多重共線性とは、従属した説明変数同士が互いに予測できる場合に起こりえます。例えば、商談の成約の可能性を予測していて、入力として “営業 “と “国 “があり、すべての営業が1つの国でしか働いていないとします。この場合、営業を知っていれば、常に国も知ることができます。「営業」でグループ化し、「unique of 国」という数値項目として表示することで、これを検出することができます。この場合、「営業」には常に1つのユニークな「国」を設定することになります。多重共線性が発生すると、線形回帰が解析的に解けなくなる技術的な問題が発生します。
詳しくは、「線形回帰の分析的解法」記事を御覧ください。
最終的な式は行列の反転を必要としますが、もし多重共線性があるならば、線形に関連した列を持つことになり、この行列は非反転になります。線形回帰の解き方は、その後、(より長いプロセスを使用して)異なりますが、この場合、結果は、奇妙なものになり、モデルの質を低下させることさえあります。
ディスカバリーは、推薦セクション中の「DUPLICATES」でこの問題を強調します。次の例では、上で使用したのと同じデータセットを使用します。しかし、この例では、全く同じ意味を持つ2つのカラムがあります。SKU (番号) と SKU_Name です。それでは、次の「なぜそうなったのか(Why It Happened)」のチャートを見てみましょう。
ご覧のように(青い囲み部分)、Einstein Discoveryはこれら2つの変数の相関関係を理解しようとしていますが、実際には同じものであり、どちらに効果を帰属させるべきかはわかりません。
余談:SKUとSKU_Nameの両方を持つモデルの第1階層の相関を見ることによって(モデルの「ストーリーの編集」のスナップショットである下のチャート)、SKU_Nameが目的変数と6.2%相関していることがわかります、したがって、それがより正確さをもたらすと期待するでしょうが、しかし、そうではありません! 実際、モデル全体のRスクエアは、必ずしも各入力変数の相関係数の合計ではありません。
多重共線性を取り除く必要があります。多重共線性が存在するかどうかを確かめるヒントは以下の通りです。
多重共線性はモデルを劣化させる可能性があることを知っておいてください。入力変数のビジネス上の関係を理解し、データセットを適切に調査することは、多重共線性を回避するのに役立ちます。Einstein Discoveryはまた、改善のセクションで多重共線性を検出するためのガイドを提供します。
外れ値は結果を劣化させるかもしれません。外れ値を含む実測値を使った予測モデルで予測を行うことは正確性を欠きます。なぜなら、外れ値は例外的に他の実績値から離れていたり,簡単にカテゴリに入れられなかったりするからです。もちろん,外れ値を除去することは,目的変数のノイズを除去し,結果として精度を向上させます。
Einstein Discoveryは外れ値を検出し、下の図のように「OUTLIERS」セクションに表示します。
以下の例を見てみましょう。
異なる要因(都市、割引、プロモーション…)ごとの売上数量を持つデータセットを使います。データセットのすべての行を含めて最初のモデルを作成したところ、以下の評価指標値を取得しました。
しかし、目的変数(DailyQuantity)の分布を示す度数ヒストグラムを見てみると、2000を超える値がまばらに存在することがよくわかりました。分布を得るために、次のようにしました。
高い値を示しているDailyQuantityを取り除いたのもEinstein Discoveryの推奨です。
次のステップでは、DailyQuantityが2000よりも高いデータセットの行(外れ値)をデータフローを通して削除しました。
結果として得られたデータセットで訓練されたモデルの評価指標値は以下の図のようになりました。
外れ値を除去すると、2つのことがわかります。
一般的には、外れ値を含むモデルがより高い値の予測を出す傾向にあります。そして、それは売上数量の高値を考慮した方法となります。これは下のグラフで見ることができます:外れ値のあるモデルを使用した予測値はY軸にあり、外れ値のないモデルを使用した予測値はX軸にあります。同一直線は赤で示されています。外れ値があるモデルの予測値が同一直線よりも高いことがはっきりとわかりますが、これは、外れ値を持つ予測値が一般的に高いことを意味します。
つまり、これは大多数の売上数量だけに当てはまるのではなく、外れ値がモデルを歪めて、少量の売上数量を過大に予測しているのです。
以前のブログでもご紹介しましたが、Rスクエアのような古典的な評価指標は、データに多数の外れ値がある場合には信頼できません。結果的に、モデルの改善の一環としてモデルを構築する際に、外れ値を調査し、ビジネスとの合意が得られれば、それらを取り除くことが非常に重要になります。
Einstein Discoveryはすべての数値変数をバケツに分割します。同じバケツに属している実測値は、すべて同じ予測をします。
したがって、モデルの精度を決定するためには、正しいバケット化を行うことが鍵となります。
デフォルトでは、Einstein Discoveryはデータを10個づつのバケットに分割します。Einstein Discoveryはセグメントごとに(バケットごとに)線形回帰を実行するために常にデータをバケット化します。また必要に応じて、他のバケットオプションを選択することもできます。’ストーリーを編集’ インターフェイスで、変数を選択することで、データバケットの数を増やすことができ、その分布、ビンの数、選択したバケット方法が表示されます。 しかし、バケットの数を増やしたからといって、必ずしも成果が上がるとは限りません。実際には、変数を非常に小さなセグメントに分割すると、過学習の問題にぶつかることがあり、つまり、訓練データとは別のデータでの結果が悪くなることを意味します。
下のスクリーンショットを見るとわかるように、推奨バケットは選択肢として用意されていません。推奨バケットは、最初のストーリー作成後に使用することができます。
引き続き、上の例で売上数量を予測しているところから見ていきましょう。 最も強力な予測因子の一つは、直近の期間の平均売上高の一つである「MovingAverage」です。最初のストーリー作成で、Einstein Discoveryはカウントに基づいてバケット化を行い、Rスクエアは0.82でした。しかし、レコメンデーションでは12の範囲にバケット化することを提案しています。
Einstein Discoveryの提案に従うと、Rスクエアが0.84に向上したのでモデルの質が上がったが、レンジが増えたので複雑な説明になってしまいました。これがビジネスの観点から問題ないのであれば、Einstein Discoveryの推奨するバケットを使用した方がモデルの品質のためには良いでしょう。
モデルの品質と説明しやすさはバケッティングが鍵を握ります。最適な評価指標値と明確な説明可能性の間の適切なバランスは、ビジネス的な観点を考慮して決定する必要があります。
Einstein Discoveryは、入力(説明)変数と出力(目的)変数の間の相関関係を利用して予測を導き出しますが、その際に、2次相互作用と呼ばれる、2つの変数が一緒になって結果を説明する方法も考慮します。これは、異なる特徴/変数からの2つの値の共起について、明示的な回帰係数が推定されることを意味します。例えば、次のような入力変数で商談の勝率を予測している場合、Einstein Discovery は 2 つの値の組み合わせに対して明示的な重みを持たせます。(例: 国 x 産業の組み合わせまたは国 x 製品の組み合わせ)。”国”、”産業”、”製品 “の場合、Discoveryは2つの値の組み合わせ(例:国×産業の組み合わせまたは国×製品)に対しては明示的な重みを持ちますが、3つの値の組み合わせに対しては同時に重みを持たせません。だから、例えば、Einstein Discoveryは、ドイツの製薬業界は平均よりも優れていますが、より具体的に見てみると製薬業界の製品Aは、ドイツの特定の法律のためにあまりよろしくないことがわかる、というような2変数のコンビネーションによる相関を見ることができます。場合によっては、モデルの精度を向上させるには、変数間の相互作用の第3レベルまで見たいときがあるでしょう。モデルの精度は、別のレベルの相互作用を追加することで改善されることがありますが、この場合は、組み合わせたい2つの列から3つの列のすべての組み合わせの可能性を表す別の変数を作成する必要があります。そこで、例に照らし合わせると、国 X 産業のすべての可能性を表す列を作成する必要があります。
新しい列と既存の列の間の2次の相互作用は、3次の相互作用を生成します。
従って、上記のケースでは、国X製品とセグメントの組み合わせは、明示的に3つの変数、国、製品、セグメントの間の相関のための回帰係数または重みを推定することができます。しかし、このタイプの変数を追加する際には、いくつかの配慮が必要です。
ご覧のように、国 フランス x 製品 A は、唯一の組み合わせであり、Einstein Discoveryがセグメント変数と相関する唯一のものです。このモデルでは、France,ProductCやFrance,ProductBの列を単独で作成することができないため、3段階の相関関係を他の製品に外挿することができません。
今回のブログでは、モデルの精度を高めるために使える改善方法を見てきました。これらすべての背後にある基本的なルールは、機械学習によって作られる予測モデルに従い、改善し、受け入れることは、データアナリスト/データサイエンティストとビジネスユーザーの共同作業であるということです。データの挙動と変動をビジネス的に理解することは、許容される評価指標値(MAEのような)を決定する上で重要であるだけでなく、バケット化とモデル分割の決定のような結果と説明可能性を向上させる方法を見つけることです。一方で、データサイエンティストは、Rスクエアや改善手法のような意味の根底にある評価指標を深く理解しているため、モデルの品質についてすぐに結論に飛びつくことはしないので、モデルの継続的な改善を促すことにも役立ちます。そこで私からのアドバイスは、モデル開発や評価の初期段階でビジネスユーザーを巻き込むことです。このようなコラボレーションは、2つの異なるコンピテンシー、最終的には機械と人間の間のギャップを埋めるのに役立ちます。
皆様、OlfaのEinstein Discovery記事第2弾いかがだったでしょうか?より良い予測モデルを作るためのいくつかの手法を通してEinstein Discoveryの深遠な世界の一端を理解していただけたかと思います。予測モデルのチューニングは単にスコアを上げるだけではなく、ビジネスユーザーの利便性を第一に考える必要があります。Einstein Discoveryは、ビジネスユーザーにとっても解釈がしやすい説明を提供できるAIツールです。なので、この説明という部分を損ねないようにかつスコアを上げていくというOlfaのチューニング技法はためになったのではないでしょうか?最後に、記事中何回かOlfaは言及していますが、予測モデルのチューニングにはデータの変換が必要になる場合があります。そのときに重要になるのはデータのビジネス的な理解です。ぜひともその視点が抜けないように留意してチューニングをしていただくようお願いします。
この記事を通して、ますます皆様がEinstein Discoveryを好きになってくれることを願いつつ(小見一平)