(翻訳) Einstein Studioのモデルビルダーを使用して予測(Forecasting)モデルを構築する

5
(1)

原文

このガイド では、Data Cloud の モデル ビルダーを使用して 予測 ( Forecasting ) ユース ケース向けの 予測モデル ( Predictive model )を構築する プロセスを順を追って 説明します 。

予測モデルの 構築やノーコード モデル ビルダー の探索が初めての 場合は、 包括的な紹介記事として、 Salesforce ブログの 「Data Cloud でノーコードでAIモデルを作る 」 をぜひご覧ください 。

訳 AI and Analytics Specialist , Salesforce, Ippei Komi

ノーコード モデル ビルダー で何ができるのか?

予測 ( Forecasting ) の ユースケースに踏み込む前に、ノーコード モデル ビルダー がサポートする アルゴリズム について見ていきましょう。

ノーコード モデル ビルダー は現在、2つの アルゴリズムを サポートしています。

回帰アルゴリズム数値的な結果を予測するのに最適です。

ユースケース

  • 数値を予測する、例えば取引金額や数量など。
  • レコードに優先順位をつけるためにエンティティにスコアを付ける。例えば、リードスコア、オポチュニティスコアなど。
  • 顧客離れやローン承認など、事象の発生確率を予測する。

二値分類アルゴリズム:これは二値(真/偽)の結果を予測するのに役立ちます。

ユースケース

2つの事象のうちいずれかが発生する確率を予測する(ポジティブ/ネガティブ、成功/不成功の結果)。例:取引完了、融資承認

予測 (Forecasting) とは?

予測 (Forecasting)とは、過去のデータやパターンに基づいて変数の将来の値を推定することです。さまざまな業界で一般的に使用されており、トレンド予測、情報に基づく意思決定、将来の計画などに役立てられています。

業界を問わず、人気の高い予測のユースケースには以下のようなものがあります。

予測 (Forecasting) と予測 ( Prediction )の違いは何ですか?

予測 ( Prediction )と予測 (Forecasting)は、しばしば同じ意味で使われますが、実際には明確な違いがあります。例えば、特定の月の売上を推測 することは予測 (Prediction) のように聞こえますが、実際には予測 (Forecasting) です。それでは、ユースケースを使用して、両者の違いを見ていきましょう。

訳者注:ForecastingもPredictionも日本語訳としては、”予測”が当てはまります。本記事では、混同しないように予測 (Forecasting)や予測 (Prediction)のように、後ろにForecasting・Predictionを付加しています。

ユースケース:預金予測(Forecasting)

次の3か月間の顧客の預金予測 (Forecasting)をユースケースとして、その違いを説明しましょう。

顧客の過去の預金データと、いくつかのプロフィール属性(年齢、性別、婚姻状況、扶養家族数など)を基に、今後3ヶ月間の預金額を予測(Forecasting)する。

下の画像を参照してください。トレーニングデータセットには、30人の顧客の数か月間の預金データと、例示目的の年齢と性別という2つの変数のみが含まれています。

  • 予測 (Prediction)とは、既存の関係性やパターンに基づいて、新規または未確認のデータポイントにおける変数の値を推定することを指します。既存の顧客/トレーニングデータセットで観察されたパターンに基づいて、新規顧客(異なるID)の預金額を推定したい場合、それは予測(Prediction)となります。
  • 予測(Forecasting)とは、過去のデータと特定されたパターンに基づいて、将来の値を結果変数として推定することを意味します。過去の預金データを使用して、同じ顧客の今後の月々の預金額を推定したい場合、それが予測(Forecasting)です。
Image 1:予測 (Forecasting) vs 予測 (Prediction)

その他の主な相違点をまとめると、以下のようになります。

予測 (PREDICTION)予測 (FORECASTING)
ゴール新しいデータに対して値を推定将来の値を推定
顧客離反の予測、ローン承認。売上高、生産量の予測。
特徴より即時的または具体的より長い期間におけるより幅広い傾向の推定
過去データの利用モデルにパターンを学習将来の値の統計的尺度を学習
予測の確実性の度合い
時間の側面必ずしも時系列が必要とは限らない主に時系列ベースの問題解決
Table 1: 予測 (Forecasting) vs 予測 (Prediction)

予測 (Forecasting) を行うためにどのようなアルゴリズムが使用されていますか?

予測(Forecasting)問題は通常、以下のようなさまざまなアルゴリズムを使用して対処されます。

  1. 自己回帰アルゴリズム:
    1. ARIMA(Autoregressive Integrated Moving Average:自己回帰移動平均):過去の値、遅延差分、移動平均を考慮して時系列データをモデル化する、一般的な手法
  2. 平滑化アルゴリズム:
    1. Holt-Winters: 指数平滑法を用いて、季節的要素を含む時系列データを予測する手法の一派
    2. 指数平滑化:過去の観測値に指数関数的に減少する重みを割り当てる、よりシンプルな方法
  3. 回帰アルゴリズム:
    1. XGBoost(Extreme Gradient Boosting):時系列データを回帰問題として扱うことで予測に利用できる強力なアンサンブル学習手法

XGBoostがこの記事の主題であることを繰り返し述べます。すなわち、回帰アルゴリズムを使用して予測 (Forecasting) モデルを構築することがこの記事の本質です

モデルビルダーを使って、予測 (Forecasting) ユースケースの問題解決

アプローチ:

年齢や性別といった定性的な変数だけでは、預金の予測 (Forecasting) は正確ではありません。そこで、前月の預金額をモデルの入力変数として使用するという代替的なアプローチが考えられます。

預金は各月に対して利用可能ですが、これを同じ行に変換して、前月の預金をモデルへの入力変数として使用したいと思います。そこで、データ変換のラグ関数を使用して、ラグ変数(Savings_Lag1、Savings_Lag2、Savings_Lag3)を作成します。

ラグ変数とは:

4月の節約額を予測するために、過去3か月間のデータとして3月、2月、1月のデータを使用します。各月のデータが斜め下方に移動し、オフセットされていることに注目してください。

Image 2: データをラグベースの訓練データセットに変換する

データ変換でこのラグ変数のセットを作成するには?

  • データ変換機能を使用すると、データの構造、フォーマット、値を操作および変更することができます。これは、Data Cloudでさらに使用するためにデータを適切な形式に変換するデータ処理および準備に不可欠な機能です。
  • データ変換では、現在の行と何らかの関連性のあるテーブル行の集合に対して計算を行うSQLの強力な機能であるウィンドウ関数が提供されます。これらは、累計、移動平均、その他の累積計算を行うために頻繁に使用されます。一般的なウィンドウ関数の1つにラグ(Lag)があります。.

データ変換のラグ機能とは?どのように使用するのですか?

  • ラグ関数を使用すると、同じ列の前の月の値を見つけることができます。
  • 予測 (Prediction) モデルを構築するには、ラグ関数が不可欠です。過去の値が現在の値にどのように影響するかを理解することで、将来の値をより正確に予測 (Forecast)するモデルを作成することができます。
  • また、ラグ関数は、既存の時系列データから新しい特徴を生成するために頻繁に使用されます。これらの特徴は、モデルのパフォーマンスを向上させることができます。これが、私たちが預金予測のために行う予定のものです。
  • 先に進む前に、ラグ関数の構文を理解しておくと便利です。

LAG (column1) OVER (PARTITION BY dimension_column ORDER BY sort_column) AS previous_value

  • PARTITION BY : データが複数のディメンションにまたがって分割されている場合に使用します。私たちのケースでは、Client_IDです。
  • ORDER BY : これを使用してデータを並べ替え、前回の値を取得します。ここでは、前回の値を取得するために月ごとに並べ替える必要があります。これはオプションですが、並べ替えによって取得されるデータに影響するため、推奨されます。
  • 本例では、LAG関数は以下のようになります。

LAG (Savings)OVER(PARTITION BY Client_id ORDERBY Month) AS Savings_Lag1

  • これにより、新しい列「Savings_Lag1」が作成され、各顧客の前月の預金額が格納されます。

Data Cloudのモデルビルダーで予測 (Forecasting) モデルを作成する手順:

以下の詳細な手順に従って、ラグベースのトレーニングデータセットを使用して、モデルビルダーで多変量予測モデルを構築してください。

ステップ1:データ変換を使用して、ラグベースのトレーニングデータセットを作成

まず初めに、Image 2:データのラグベースのトレーニングデータセットへの変換で示されているように、ラグベースのトレーニングデータセットを作成します。私たちの目標は、以下の図のようなデータ変換を作成することです。

Image 3: データ変換を使用して、ラグベースのトレーニングデータセットを作成
  • データ変換を開く → 新規データ変換をクリック →バッチデータ変換をタイプとして選択
  • 元のトレーニングデータセットを含むデータモデルオブジェクトを呼び出します。
  • 変換ノードを追加します。
  • 今度は、ラグ 関数を使用して、今月のSavingsに基づいてSavings_Lag1を作成
    • 「Savings」をベースの列として選択し、Data And Time関数アイコンをクリックしてカスタム式に移動します
      • Image 4: データ変換のラグ関数
    • Multiple row formula トグルを有効にして、行全体でサポートされている関数(ウィンドウ関数)を表示します。
    • Columnsタブを使用して、lag(Savings__c) という数式を挿入します。PARTITION BY および ORDER BY 節を指定します。
      • Image 5: データ変換中のラグ関数プロパティ
    • 新たに作成された列は末尾に追加されます。最初の期間の先行データがないため、一部の行がNULL値になる場合があります。
      • Image 6: Preview with Lagged column
      • Note: プレビューのデータは並び順で表示されませんが、ラグは指定された ORDER BY パラメータに基づきます。
    • バッチデータ変換 は本質的に順次処理です。t-2の値を取得するには、(t-1)の値にラグ関数を作成します。以下のようになりますlag(Savings_Lag1__c )
    • 残りのラグベースの変数についても、lag(Savings_Lag2__c) のように同様に繰り返し、ラグ3を別々のノード( Image 4を参照)または同じ変換ノードで実行します。
  • データを出力データモデルオブジェクト(DMO)に保存します。
  • 今すぐ実行をクリックして、出力がOutput DMOに保存されるようにすることを忘れないでください。

ラグ変数はいくつが理想的でしょうか?
最低でも3つのラグ変数を用意するのが望ましいでしょう。 どの程度の期間を振り返るかは、お客様が決定できます。 6か月間を振り返る場合は、6つの変数(Lag1からLag6)を作成する必要があります。

ステップ2:データの検証

  • データ変換の出力DMOのプレビューセクションでは、行をまたいだデータの検証に役立ちます。特定の顧客(PARTITION BYの値と同じ)に対して検証を行うのに最適です。
  • Data Cloudのクエリエディター を使用して内容をチェックできます
    • Image 7: クエリエディターでラグ関数の検証
    • データが予想通り斜め下に移動しているので、早速モデルのトレーニングを始められます 😄
    • 注:元のトレーニングデータセットでSQLベースのラグを実行することで、この結果を交差検証することもできます。

Step 3: モデルのトレーニング

  • 過去のデータを含む単一のDMOにデータがある場合は、通常のモデルのトレーニングプロセスに従います。
  • オプションのステップとして、ラグ変数のいずれかをNULLとしてレコードをフィルタリングしたり、期間が2023年4月以降のものを選択したりすることができます。
  • 目標設定ステップで、預金列を最大化します。
  • XGBoostをアルゴリズムとして選択
    • 時系列予測 (forecasting)は一般的に、非線形性や特徴間の深い相互作用にうまく適応するモデルから恩恵を受けます。SalesforceのGLMは非線形性には有効ですが、深い相互作用を学習する能力には限界があります。ツリーベースのモデル(ランダムフォレスト、勾Gradient Boosting MachinesおよびExtreme Gradient Boostingなど)は、時系列データのこれらの特性の両方を本質的に処理することができ、はるかに効率的に処理できます。
    • ブースティングアルゴリズム(Gradient Boosting MachinesおよびExtreme Gradient Boosting、別名XGBoost)は、前のモデルの誤差に逐次モデルを当てはめることでパフォーマンスを向上させるため、一般的に良好なパフォーマンスを発揮する傾向があり、XGBoostはその中でも最高レベルのアルゴリズムです。
  • 最初のバージョンでは、重要なカラムをオートパイロットに決定させることもできますし、どの変数のセットをモデルに投入するかを決定することもできます。
  • このモデルの構築に使用された設定の概要は、以下の画像をご覧ください。

    • Image 8: 予測 (forecasting)モデルの設定
  • トレーニングが完了したら、トレーニングメトリクスとトップ要因を表示します。
    • Image 9: 予測(forecasting)モデルのトップ要因
  • 必要に応じてモデル作成を繰り返します。
  • メトリクスが良好な場合は、モデルを起動し、推論に進みます。

Step 4: 今後数か月の推論/予測(Prediction)

特定の顧客の今後3ヶ月間の節約額を予測 (forecast)するには、推論または予測(prediction)の設定を行う必要があります。

  • (前セクションで説明したトレーニング変換と同様の)バッチデータ変換を使用して、以下の画像のような設定を構築します。
    • Image 10: 予測 (forecasting) モデルの推論 データ変換
  • まず、推論用データセットを用意します
    • 最新月のデータ(この場合は2024年9月)を用意してください
    • 最初のいくつかの予測を開始するには、下記のように3か月分のラグ変数を使用したので、3か月分の履歴データを追加します。
    • Image 11: 予測 (forecasting)モデルの推論データセット
  • データ変換を作成する手順:
    • まず、推論データセットを入力ノードとして読み込みます。
    • トレーニングデータの設定と同様に、Savings_Lag1、Savings_Lag2、Savings_Lag3変数を設定するために、3つの変換ノードを追加します(または、1つの変換ノードで3つのラグに基づく計算を行います)。
    • 次に、AIノードを追加し、前のステップでトレーニングしてアクティブにしたモデルを選択します。
      • 目標は、左側に表示されているモデルフィールドに、以前のノードの列をマッピングすることです。
      • 第1AIノードについては、1か月先の予測を行っています。この場合、2024年10月の予測です。
        • 2024年10月の予測(forecasting)を行うために、3つのラグ変数すべてが利用可能です。
          • 実際の節約額(推論データセット:9月分) をLag1という変数にマッピングします
          • Savings_Lag1 (推論データセット:8月分) をLag2という変数にマッピングします
          • Savings_Lag2 (推論データセット:7月分) をLag3という変数にマッピングします

            • Image 12: 予測 (forecasting)モデルの推論設定における第1AIノードのマッピング
      • 2番目のAIノードでは、2か月先の予測、つまり2024年11月を予測しています。
        • 2024年9月から2か月先の予測を行うために利用可能なラグ変数を予測します。すなわち、2024年11月です。
          • 先のステップで作成された”予測された預金額”、つまり、1か月先の予測(10月の予測)を変数:Lag1に当てはめます。
          • 実際の預金額(推論データセット:9月分)を変数:Lag2に当てはめます
          • Saving_Lag1(推論データセット:8月分)を変数:Lag3に当てはめます

            • Image 13: 予測 (forecasting)モデルの推論設定における第2 AIノードのマッピング
      • 第3のAIノードでは、3か月先の予測、すなわち2024年12月を予測(forecasting)しています。
        • 2024年9月から3か月先の予測を行うために利用可能なラグ変数を予測します。すなわち、2024年12月です。
          • 第2AIノードで作成された予測預金額(11月分)を変数:Lag1にマッピングします
          • 第1AIノードで作成された予測預金額(10月分)を変数:Lag2にマッピングします
          • 実際の預金額(9月分)を変数:Lag3にマッピングします。

            • Image 14: 予測 (forecasting)モデルの推論設定における第3 AIノードのマッピング
      • このロジックを拡張して、各月のモデルのラグ変数にわたって変数をオフセットすることができます。
    • これらの結果を出力DMOに保存します。必要に応じてフィールド名を変更できます。
      • Image 15: 変数のリネーム
    • 保存して変換を実行すると、予測値が出力DMOに投稿されます。これにより、今後3か月の予測が得られます。
  • クエリエディターで確認することで、予測を検証できます。
    • Image 16: 3か月分の予測出力データをクエリエディターで検証

予測(forecasting)モデルのアウトプットを改善するためのベストプラクティス:

このドキュメントは、預金に関する2つの定性変数と1つの定量変数のみを使用して、特定の予測(forecasting)ユースケースを解決する方法を示す例です。

モデルの結果を改善するには、以下の組み合わせを行うことができます。

  • データ収集
    • パターンや傾向を把握するために、多くの過去のデータを使用します。データが多ければ多いほど、正確な予測(forecasting)モデルを作成できる可能性が高くなります。
  • データ準備:
    • 統計データや客観的なデータ、地理的なデータのような異なるパターンに貢献するような定性的な変数をより多く追加する
    • 量的変数および結果変数に影響を与える可能性のあるその他の指標を追加します。
    • ラグ変数を追加:ラグ変数を3つだけにするのではなく、12または24の変数、すなわち1年または2年分のデータにまで拡張することができます。トレーニングデータ変換と推論データ変換で同じ数の変換を作成するだけです。複数の変数にラグを適用することもできます。
    • ダミー変数で季節性を処理します
      • 季節変動は、繰り返されるパターンや周期的なイベント(例:ホリデーシーズン、四半期ごとの売上急増)を捉え、予測精度の向上と残差(エラー)の低減に役立ちます。
      • モデルビルダーでは、日付列に曜日または日付の月を呼び出す機能があり、自動的に機能として追加することができます。これにより、季節性の処理が容易になります。
      • 例えば、データの粒度に基づいて、is_holiday = Yes / No といった休日ベースの変数を作成したり、休日という名前の列を作成し、その値として休日の名称を記載したりすることができます。
    • ダミー変数でトレンドを処理します。
      • 曜日/四半期を Week_01、Week_02、Q1、Q2 などの変数として、週次/四半期のパターンを捉えることができます。
  • モデルトレーニング
    • モデルビルダーで利用できるGLM、GBMなどの他のアルゴリズムを試してみてください。
      • 予測(Predicting)モデリングと予測(Forecasting)は、一度きりで終わるプロセスではありません。データサイエンティストは、多くの手法を試し、データのエンコード方法を見直すことで、特定のタスクに最適なプロセスを見つけ出します。
    • 複数のモデルを組み合わせてみてください:複数のアルゴリズムに基づくモデルを構築し、データ変換を使用して予測値の平均や加重平均などの集約メトリックを実行します。
  • モデル検証:
    • モデル構築プロセスで生成される特徴の数が多いため、トレーニングデータ(交差検証済み)で非常に高い適合メトリックが得られることは珍しくありません。しかし、これらはモデルの真の予測精度を正確に反映しているとはいえません。十分なデータがある場合、モデルのパフォーマンスを推定する最善の方法は、直近のいくつかのオブザベーションをシリーズから分離し、Data Transformsを使用してそれらのオブザベーションに対する予測を生成し、それらのオブザベーションに対するメトリクスを計算することです。ノーコードモデルビルダーでは、これらのオブザベーションを検証用保留オブザベーションとして定義することができます。

優れたモデルを構築する鍵は、バージョン1のモデル(おそらくはより少ないデータセットで)を展開して予測を出し、Data Cloud内でそれらを処理するワークフローを作成し、それを繰り返すことです。

覚えておいてください。実用上十分なモデルを導入すれば、完璧を求めて待つよりも価値と洞察を今すぐ提供できます。

結論

このブログでは、回帰手法を使用した予測方法について探りました。バッチデータ変換の ラグ 関数を利用して過去の数か月のデータを使用してトレーニングデータセットを作成し、モデルビルダーでモデルを構築しました。さらに、予測時に一部の変数が欠落している場合でも、変数をマッピングすることでライブデータに対する推論を構築する方法についても学びました。

説明した設定は、大幅に拡張可能であり、ほとんどの時系列予測のユースケースを解決し、Data Cloudで実行可能な洞察を引き出すのに役立つはずです。複雑でユニークなユースケースがあれば、ぜひお聞かせください。

Bobby Brill氏によるレビューと、Randy Sherwood氏によるデータサイエンスに関するインプットに感謝いたします。

モデルビルダーに関するその他のリソース:

データ変換に関する追加リソース:

How useful was this post?

Click on a star to rate useful the post is!

Written by


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.