SnowPro Advanced: MLOps Engineer 無料問題 1 / 10 ・ 分野1: Operationalize Data Preparation and Feature Engineering
解約予測のモデルが、学習では高い成績なのに本番では成績が悪い。調べると、学習の各行に、時系列の特徴量の最新の値が結合されており、その行の出来事の時刻より後に計算された値も入っていた。エンジニアは generate_training_set の呼び出しをどう変えるべきか。
- スパインの時刻の列名を spine_timestamp_col 引数に渡し、その時点の値を引かせる
- spine_label_cols にラベルの列を並べ、特徴量がラベルの時点で止まるようにする
- 呼び出しで include_feature_view_timestamp_col を True にする
- 学習でも generate_training_set の代わりに retrieve_feature_values を呼ぶ
正解と解説を見る
正解: A
正解の理由
ページには、時系列の特徴量では、タイムスタンプ列の名前を渡すと、時点に合わせた特徴量の値の引き当てが自動で行われると書かれている。スパインの DataFrame はエンティティの ID・タイムスタンプ・ラベルなどの列を持ち、求めた特徴量は渡したタイムスタンプに対して時点の正しさ(point-in-time correctness)を保って取り出される。出来事の時刻の列を spine_timestamp_col に渡せば、各行にはその行の時刻の時点の値が入り、本番のモデルが持ち得ない後の値は入らない。概要ページは、これが ASOF JOIN で行われると書いている。
違う選択肢
「spine_label_cols にラベルの列を並べ、特徴量がラベルの時点で止まるようにする」… spine_label_cols は、スパインから学習セットへ運ぶラベルの列を指定するものである。どれがラベルかを示すだけで、特徴量を引く時点は別の引数で決まる。
「呼び出しで include_feature_view_timestamp_col を True にする」… このオプションは、フィーチャービューのタイムスタンプ列を出力に含めるかどうかを決める。列を含めれば値がいつ計算されたかは見えるが、各行にどの値を引くかは変わらない。
「学習でも generate_training_set の代わりに retrieve_feature_values を呼ぶ」… retrieve_feature_values は、予測のためにモデルへ渡す特徴量を取り出すメソッドとしてページに出てくる。これに替えても漏れは直らない。タイムスタンプの引数を渡す必要があることは変わらないからである。
学習と推論のずれを実務で防ぐ
出来事の時刻より後の値が入ると、学習の成績が実力より良く見える。この場面で見えた差はそれである。フィーチャービューがタイムスタンプ列を持つなら、学習の呼び出しのたびにスパインのタイムスタンプを渡す。時系列の特徴量を含むフィーチャービューの側にもタイムスタンプ列の名前が要るので、引き当ての両側に時刻がそろう。