データセットのパーティション分割を、ランダムではなく、特定の行範囲ごとに分割したいと考えています。
--
オートパイロットで学習させた際、訓練データ/検定データ/ホールドアウトに、自動的に分割されますが、このとき、ランダムに行を選択して分割されているように思います。
現在学習に使っているデータセットは、複数の情報源から、それぞれ複数のデータを取得したものになっており、同一の情報源から取得したデータ同士は、非常に似通ったデータになっています。
この状態でオートパイロットで学習させると、訓練データと非常に似通ったデータが、検証データやホールドアウトに含まれてしまい、過学習したモデルが生成されてしまいます。
データセットは、情報源順でソートされているので、パーティションの分割をランダムではなく、特定の行範囲ごとに分割すれば、過学習が回避できると考えていますが、そのような設定は可能でしょうか?
よろしくお願いいたします。
解決済! 解決策の投稿を見る。
製造業のお客様では、よくお聞きする課題であり、例えば、製造ロットの単位では、製造条件・設備の日間差が製造ロット内部で似通っている可能性が高く、別ロットでは条件が異なるため、それらのロットのデータをランダムに分割して学習するとリーケージの原因となります。
同じロットのデータが、訓練、検定それぞれに含まれてしまうためです。
このような課題に対して、DataRobotで用意されているパーティションの中からグループパーティショニングを利用することで対処することが可能です。
グループパーティションは、選択したカラムの値(グループID)を基準とし、同一のグループIDを持つ行を同じパーティションに属するように制御することが可能です。
これにより、同じグループに属する行が、訓練、検定、ホールドアウトのパーティションにまたがらないように制御することが可能となり、リーケージを回避することが可能です。
グループパーティションは、選択したカラムの値(グループID)を基準とし、同一のグループIDを持つ行を同じパーティションに属するように制御することが可能です。
これにより、同じグループに属する行が、訓練、検定、ホールドアウトのパーティションにまたがらないように制御することが可能となり、リーケージを回避することが可能です。
今回の場合、複数の情報源からデータを取得されているということですので、例えば、情報源というカラムを追加し、情報源毎に同一のグループIDを代入しておきます(上記図の場合、グループA、グループBなどが情報源毎のデータと考えます)。
これにより、例えばFold1(グループA、B、C、D)は訓練用として利用され、Fold2、3はそれぞれ検定、ホールドアウトで利用されることになりますので、リーケージを回避することが可能です
具体的な手順としては、そのデータをDataRobotにデータ投入し、ターゲットを選定した後に「開始」ボタン下部にある「高度なオプション」ー「パーティション」ー「パーティション手法を選択」から、「グループ」を選択します。
グループID特徴量に例えば情報源を表すカラムを選択します。
グループパーティションを行う場合、全体の件数と比較して、一つのパーティションに多数のグループ(概ね3以上)が前提となっていますので、グループ数が少数の場合は、パーティション特徴量の機能を用いることによって、1行ずつ、属するパーティションを指定することが可能です。
また、本トピックに関連した内容で、DataRobot様にて過去セミナーを実施されていますので、お時間がございましたら是非ご参考下さい。
詳しく教えていただきありがとうございます。
セミナーの方もご紹介いただきありがとうございます。確認してみます。