タスクの期間を予測する回帰モデルを作成しようとしています。私が持っているトレーニングデータは、これらの変数を使用して約4万の完了したタスクで構成されています。
- 誰がタスクを実行したか(約250人)
- プロジェクトのどの部分(サブプロジェクト)でタスクが実行されたか(約20の異なる部分)
- タスクのタイプ
- タスクの開始日(10年分のデータ)
- タスクを実行しなければならない人がそれがかかると推定する時間
- このタスクが完了するまでにかかった実際の期間
所要時間は30分から数百時間の間で変動しますが、かなり正確に歪んでいます(ほとんどのタスクは10時間以内に完了します)。対数スケールでは、分布はまだわずかに右に歪んでいます。
予測は完璧である必要はありませんが、私は人々の推定を改善しようとしています。質問の1つは、「定義されたbeterをどのような尺度で使用できるか」です。大きな誤差は小さな誤差よりもはるかに悪いため、平均二乗誤差(MSE)が最良の測定になると思います。
機械学習に移る前に、平均または中央値の誤差で推定値を調整したり、サブプロジェクトでグループ化された人別の平均値/中央値誤差で調整したりするなど、いくつかの単純なアプローチを試しましたが、これらはそれぞれパフォーマンスが低下しました。
機械学習で最初に遭遇した問題の1つは、カテゴリ変数の数でした。これは、ほとんどのモデルでこれらを何らかの方法でエンコードする必要があるためです(例:ワンホット)。とにかく、私はいくつかの線形モデルを適用しようとしました。たとえば、確率的勾配降下法では、私のアプローチは次のようになります。
- カテゴリ機能をワンホットエンコード
- 日付をUNIXタイムスタンプに変換
- 0と1の間にないすべての機能を正規化する
- データを80/20学習セットとテストセットに分割します。
- グリッド検索の相互検証と学習セットを使用して、最適なハイパーパラメーターを見つけ、モデルに適合させます。
- テストセットで予測する
- エラー/スコアを計算する
今気づいたことの1つは、結果がかなり異なるということでした。ある実行では、MSEは別の実行(150および280)の2倍に近かったです。もう1つは、人々の推定値のMSEが約80であるため、モデルのパフォーマンスが少し悪いことです。
パフォーマンスを改善するための私の努力の間に、私は誰かが生存モデルを使用することを提案するこの質問を偶然見つけました。現在、私はこれらの種類のモデルに慣れていませんが、それは有望に聞こえましたが、これを使用した最初のテスト中に、目的に対して遅すぎる(データセットが大きすぎる)ことがわかりました。
生存モデル(およびWikipediaページ)の使用を提案したのと同じデータサイエンスの回答で、ポアソン回帰についても言及しましたが、これを自分のケースにどのように適用するかはわかりません。
つまり、2つの質問があります。1. SGDを使用する私のアプローチは「正しい」ものでしたか、それによって結果を改善できると思いますか?2.他のモデルはこの種の予測により適していますか?そうであれば、私がそれらをどのように使用するかを少し説明できますか?