データサイエンス

ForecastFlow機能追加(20210705リリース)

ForecastFlowの20210705リリースによるアップデートで、予測モデルを構築する際、詳細設定(Advanced Settings)による自動機能が3つ追加されました。

f:id:gri-blog:20210706161309j:plain
  • UnderSampling(アンダーサンプリング): 訓練タスクのモデルタイプがClassification分類(データ上は二値分類)の際、2値の件数が同数になるように、ランダムにアンダーサンプリングされます。”Enable Undersampling Feature”のチェックボックスをオンにすることで、アンダーサンプリングが実施されます。なお、テストデータや解釈に対する内容に関して後述します。
  • Hyperparameter(ハイパーパラメタ): デフォルトで試行回数(Number of Turnings)が20回になっておりますが、試行回数を減らすことで、訓練時間の短縮が見込まれます。なお、試行回数を減らすと予測精度が低下する傾向にあります。
  • Model Splitting(モデル分割): 以前からモデル分割機能は存在しましたが、カテゴリ特徴量の値ごとにモデルを自動分割します(”The column to split the model”にてカテゴリ特徴量を選択します)。選択できるカテゴリ特徴量の値は、最大15種類までの特徴量になります。限定を解除するためには、カスタムプランへの契約変更が必要になりますので、お問い合わせください
f:id:gri-blog:20210706161615j:plain
詳細設定の注意事項

今回のアップデートの注意事項といたしまして、自動アンダーサンプリングと自動モデル分割を同時に実行できません。この機能追加のリリースは近い将来に実施予定です。

もう1つの注意事項として、自動アンダーサンプリングの機能が追加されましたが、次回のアップデート(2021/7/26週を予定)まで慎重にご利用いただきたい点を下記に記載いたします。

アンダーサンプリングを利用するシナリオは、不均衡なターゲットデータに対して予測精度を向上させる予測モデルを構築することです。現バージョンのForecastFlowの予測精度レポート(Performance Report)は、二値問題では閾値を0.5にした上で、予測精度を算出しています。今回のアップデートでは、訓練データのみアンダーサンプリングしており、テストデータに対してはアンダーサンプリングを行わずに解釈しやすい数値での感度分析(Sensitivity Analysis)を演算しています。この点に起因して、先ほどの閾値0.5では、アンダーサンプリングをした際、実際は予測精度が向上しているにも関わらず、予測精度が減少したように見えるケースが発生します。次回のアップデートで、閾値の最適化機能を追加し、アンダーサンプリングを適切な予測精度と共に確認できるようにします。

f:id:gri-blog:20210706164539j:plain

念のため、通常の予測モデル構築でのテストデータ分割を説明します。アップロードしたデータが1,000件で陽性率が10%であったケースを考えてみます。訓練データとテストデータを7:3で分割した場合、陽性率が変わらないまま、件数が7:3に分割されます。訓練モデルをテストデータに当てはめ、事前的な予測精度を算出します。不均衡なデータの場合、良い予測精度になりずらいため、アンダーアンプリングの手法を試みます。

f:id:gri-blog:20210706165232j:plain

今回の機能追加のアンダーサンプリングでは、訓練データ700件に対してアンダーサンプリングを行い、True 70件、False 70件の1:1に補正したデータで、訓練モデルを構築し、テストデータ300件で精度検証を行います。その際、先ほどの方法と比較して、予測精度を検証する際、陽性率がかなり異なるため、予測スコアの閾値を最適化する必要があり、この機能に関して追加が必要になります。

f:id:gri-blog:20210706170251j:plain

なお、アンダーサンプリングにより訓練された予測モデルは予測精度が向上するが、推論スコアなどにはバイアスがかかることが知られています。今回のアップデートにて、推論スコアにキャリブレーション(補正)をかけて、より現実的な推論スコアにしています。例えば、感度分析(Sensitivity Plot)に関しても、より現実に近い数値に補正しています。この補正はProbability Calibrationとして知られ、現在進行形で研究が進んでいる分野になります。この解説は、別記事で行います。

古幡征史