FioneのAutoMLで時系列とグループに合わせて交差検証を設定する

来月の売上を予測するときに、検証対象より後の売上を学習に使うと、実運用より良いスコアが出ることがあります。同じ顧客の履歴を学習側と検証側の両方に入れる場合も、新規顧客への予測性能を高く見積もりがちです。Fione v2の開発版では、学習フォームで予測先に合わせて行の分け方を選べます。以下は関連変更を含む開発ビルドの手順です。

来月の売上は過去から未来へ検証する

学習フォームの「行の時間順」で売上日などを選びます。APIの項目は time_column で、初期値は未指定です。時刻の順序を表す数値、日付、日付として読み取れる文字列を使えます。欠損のない列が必要です。同じ日付の行は同じ区間に入り、異なる値が少ないと分割数が減ります。

分割数 nfolds の初期値は5です。5分割なら行を時系列順におおむね6区間に分け、最初は第1区間で学習して第2区間を検証し、次は第1・第2区間で学習して第3区間を検証します。先頭区間に交差検証の予測は作られません。分類では各分割の学習側にすべてのクラス、検証側に複数のクラスが必要です。この方式では派生特徴量の自動試行が省かれます。日付を特徴量から外しても、行の順序には使えます。

新規顧客を予測するなら顧客単位で分ける

「同じ値の行をまとめる列」に customer_id などを指定します。APIの cv_group_column は初期値が未指定です。同一グループは探索や派生特徴量の評価でも同じ分割に入ります。欠損はまとめて1グループとして数えます。グループは最低2つ必要で、希望分割数より少ない場合は分割数が減ります。分類の学習側からあるクラスが消える分割はエラーになります。

IDらしい列の候補が表示されても、設定は手動で選びます。指定した列は学習入力にも残るため、顧客IDを入力に使わない場合は除外列にも指定します。「行の時間順」とグループ列は同時に指定できません。

小さいデータでは繰り返し回数を確認する

「交差検証の繰り返し回数」(cv_repeats) の初期値は自動です。通常は2,000行以下で3回、5,000行以下で2回、それより多ければ1回です。指定できる値は1〜10で、1なら繰り返しません。時系列分割や、グループ数が分割数以下の場合は1回です。

探索は各回のスコアの平均で候補を比較します。診断や保存する交差検証の予測は初回分です。同じ実行時間では、繰り返しが多いほど試せる候補は少なくなります。設定を変えて比較するときは、最終的に予測したい期間や顧客に合わせて取っておいた検証用データでもスコアを確認します。

関連PR

  • 時系列の順序で交差検証する Fione #73
  • 同じグループを同じ分割に入れる Fione #76
  • 少量データで分割を繰り返す Fione #77

Fioneで日付文字列と構造化IDをAutoMLに渡す

Fione v2の開発版で、日時が文字列のまま入ったCSVや、区切り記号を含む識別子を扱う処理が変わりました。

日付とIDの列を残して学習する

4桁の年を含む日付文字列を入力に入れると、列単位で日付として判定します。最初の数値が12を超える行があり、2番目が12を超える行がなければ日を先に読みます。年が先に来る形式は年を起点に読み、曖昧なデータは年月日の順序が明確な形式にそろえてから渡します。時刻を含む列の「時」は基本特徴量です。

group_12 のような値が95%以上で同じ2〜4項目に分かれる文字列は、最大2列まで、グループの学習行数や項目の頻度などを作る候補になります。学習画面の派生特徴量(feature_engineering、初期値は有効)を使い、評価で改善した候補が採用されます。ほぼ一意な項目は除外され、学習時に見ていないIDの項目は欠損になることがあります。一方、通常の頻度特徴量では未観測値を最もまれな学習時の出現割合として扱います。変更前に保存したモデルの頻度処理は従来のままなので、新しい処理は再学習で確認します。

分析画面と学習条件の提案では、非負の回帰目的列の歪度が1.0以上で log1p を提案します。これは提案のしきい値です。相対誤差を重視する場合と絶対的な誤差を重視する場合では結果が異なるため、適用前後を使う評価指標で比べます。

Fione #40 / Fione #41 / Fione #42 / Fione #43

FioneのAutoMLで文章を扱うTextLinearを試す

問い合わせ文などを分類や回帰の入力にすると、Fioneの開発版では線形モデルのTextLinearも探索します。文章列の判定は語数の中央値が5語以上です。前回紹介した話題特徴量が文章を少数の数値に圧縮するのに対し、TextLinearは単語と隣接2語のTF-IDFを他の列と組み合わせ、分類はロジスティック回帰、回帰はリッジ回帰で学習します。語彙は交差検証の各学習分割で作ります。

学習結果で候補を確認する

文章列を入力に含めてAutoMLを実行します。標準の探索で条件を満たした列があれば候補に入ります。基本の語彙上限は列ごとに3万で、固定値です。探索時間が足りる場合は、最大10万語彙の版、文字の2〜5グラムを加える版、派生特徴量を外す版も候補になります。後段の配分は探索時間の15%で、文字版は空白で区切れない列や推定500万文字を超える列が対象外です。

時間やモデルサイズの制限で候補が試されないことがあります。疎な線形モデルの学習ではBLASのスレッド数を内部で制限します。学習結果にどの候補が出たかを確認し、採用後の性能は学習に使っていない文章でも評価します。これらはFione v2の開発変更です。

Fione #39 / Fione #44 / Fione #46