タスク期間を予測する


9

タスクの期間を予測する回帰モデルを作成しようとしています。私が持っているトレーニングデータは、これらの変数を使用して約4万の完了したタスクで構成されています。

  • 誰がタスクを実行したか(約250人)
  • プロジェクトのどの部分(サブプロジェクト)でタスクが実行されたか(約20の異なる部分)
  • タスクのタイプ
  • タスクの開始日(10年分のデータ)
  • タスクを実行しなければならない人がそれがかかると推定する時間
  • このタスクが完了するまでにかかった実際の期間

所要時間は30分から数百時間の間で変動しますが、かなり正確に歪んでいます(ほとんどのタスクは10時間以内に完了します)。対数スケールでは、分布はまだわずかに右に歪んでいます。

予測は完璧である必要はありませんが、私は人々の推定を改善しようとしています。質問の1つは、「定義されたbeterをどのような尺度で使用できるか」です。大きな誤差は小さな誤差よりもはるかに悪いため、平均二乗誤差(MSE)が最良の測定になると思います。

機械学習に移る前に、平均または中央値の誤差で推定値を調整したり、サブプロジェクトでグループ化された人別の平均値/中央値誤差で調整したりするなど、いくつかの単純なアプローチを試しましたが、これらはそれぞれパフォーマンスが低下しました。

機械学習で最初に遭遇した問題の1つは、カテゴリ変数の数でした。これは、ほとんどのモデルでこれらを何らかの方法でエンコードする必要があるためです(例:ワンホット)。とにかく、私はいくつかの線形モデルを適用しようとしました。たとえば、確率的勾配降下法では、私のアプローチは次のようになります。

  1. カテゴリ機能をワンホットエンコード
  2. 日付をUNIXタイムスタンプに変換
  3. 0と1の間にないすべての機能を正規化する
  4. データを80/20学習セットとテストセットに分割します。
  5. グリッド検索の相互検証と学習セットを使用して、最適なハイパーパラメーターを見つけ、モデルに適合させます。
  6. テストセットで予測する
  7. エラー/スコアを計算する

今気づいたことの1つは、結果がかなり異なるということでした。ある実行では、MSEは別の実行(150および280)の2倍に近かったです。もう1つは、人々の推定値のMSEが約80であるため、モデルのパフォーマンスが少し悪いことです。

パフォーマンスを改善するための私の努力の間に、私は誰かが生存モデルを使用することを提案するこの質問を偶然見つけました。現在、私はこれらの種類のモデルに慣れていませんが、それは有望に聞こえましたが、これを使用した最初のテスト中に、目的に対して遅すぎる(データセットが大きすぎる)ことがわかりました。

生存モデル(およびWikipediaページ)の使用を提案したのと同じデータサイエンスの回答で、ポアソン回帰についても言及しましたが、これを自分のケースにどのように適用するかはわかりません。

つまり、2つの質問があります。1. SGDを使用する私のアプローチは「正しい」ものでしたか、それによって結果を改善できると思いますか?2.他のモデルはこの種の予測により適していますか?そうであれば、私がそれらをどのように使用するかを少し説明できますか?


少しトピックから外れているかもしれませんが、タスク期間推定のためのアンサンブルの構築に関心があるため、データセット(および最終的に構築するモデル)を共有できる可能性はありますか?
で、

1
残念ながら、短い探索段階の後、プロジェクトは缶詰になりました。データセットも共有できません。正直に言うと、まだアクセスできるかどうかさえわかりません。しかし、幸運を祈ります!それ以来、私はデータサイエンス全般について多くのことを見て学びましたが、このタスクに適切なアーキテクチャをまだ見ていません。
ジャージー

1
ご説明ありがとうございます!microsoft.com/en-us/research/uploads/prod/2019/01/…は、成功したアーキテクチャを構築したようです。
で、

本当に面白いです!彼らが使用した機能は、私が使用できる機能に非常に近いものです。それらのタスクは、4つのかなり小さいバケットにのみビニングされていますが、<30m、30m、1hおよび> 1hです。私の場合、1〜4時間程度のタスクもあれば、数週間かかるタスクもあると思います。とにかくそれが可能であれば、プロジェクトで成功したかどうかをお知らせください!
ジャージー

回答:


6

分析は良かったと思います。

生存分析の手順については、シナリオで使用すれば十分だと思います。それでも時間がかかるかもしれませんが、その結果は良好で非常に洞察に満ちています。

データに生存分析を適用したので、次の仮定が満たされていることを確認する必要があります。

  1. 生存関数または生存曲線を推定する方法はいくつかあります。生存データのモデル化に使用される一般的なパラメトリック手法はいくつかあり、それらは母集団内の生存時間の分布に関して行われる仮定の点で異なります。人気のある分布には、指数分布、ワイブル分布、ゴンペルツ分布、対数正規分布があります。

  2. おそらく最も一般的なのは指数分布です。これは、参加者が関心のあるイベントに苦しむ可能性は、その人がイベントを起こしていない期間とは無関係であると想定しています。他の分布は、個人がイベントを発生させる確率について異なる仮定をします(つまり、時間の経過とともに増加、減少、または変化する可能性があります)。生存分析のためのパラメトリック手法の詳細は、HosmerとLemeshowおよびLeeとWang1に記載されています。

  3. ここでは、2つのノンパラメトリック手法について説明します。これらの手法では、人が事象を発生させる確率が時間とともにどのように変化するかについての仮定はありません。ノンパラメトリック手法を使用して、生存分布または生存曲線を推定してプロットします。下の図に示すように、生存曲線はステップ関数としてプロットされることがよくあります。時間はX軸に表示され、生存(リスクのある人の割合)はY軸に表示されます。生き残っている参加者のパーセンテージは、生きているパーセンテージを必ずしも表していないことに注意してください(これは、関心のある結果が死であると想定しています)。「生存率」は、別の転帰イベントのない割合(MIや心血管疾患のないパーセンテージなど)を指す場合もあれば、健康な転帰を経験しないパーセンテージ(癌の寛解など)を表す場合もあります。

あなたはより良い理解のためにこのリンクを通過することができます。

ポアソン分布について、次のようにデータがポアソン分布に従っているかどうかをプロットして確認しましたか?

ここに画像の説明を入力してください

次の仮定が当てはまる場合、ポアソン分布は適切なモデルです。

  • kは、間隔内でイベントが発生した回数で、kは0、1、2、…の値をとることができます。
  • 1つのイベントの発生は、2番目のイベントが発生する確率には影響しません。つまり、イベントは独立して発生します。
  • イベントの発生率は一定です。レートは、一部の間隔では高く、他の間隔では低くできません。
  • 2つのイベントがまったく同時に発生することはありません。代わりに、非常に小さな各サブインターバルで、1つのイベントが発生するか、発生しません。
  • 小さなサブインターバルでのイベントの確率は、サブインターバルの長さに比例します。

または

  • 実際の確率分布は二項分布によって与えられ、試行回数は、求めている成功数よりも十分に大きい

これらの条件が満たされている場合は、ポアソンモデルを使用できます。このリンクにアクセスしてください

RPythonでのこれの実装。

最後に、2つの質問に対処します。

  1. あなたのアプローチは正しいですその方法を使用して問題はありません。結果を改善するには、機能engg(新しい変数を導出する)で作業する必要があります。継続時間を連続変数として検討しているため(そのログ変換を実行した場合、最初に述べましたか?)

  2. あなたのシナリオでは、SurvivalとPoissonがより良い結果をもたらすと思います。これらに時間がかかると思われる場合は、データのサンプルを取得して作業を完了してください。結果を連続変数として検討している場合は、ランダムフォレスト、XGBoostを使用できます。これは、連続変数の予測に使用されるすべての方法です(ただし、もしそうなら、サバイバルとポアソンのフィッティングにより多くの時間を費やしてから、その他の予測手法)

問題がある場合はお知らせください!


1

ほとんどの場合、SGDはあなたを制限する要素ではありません。しかし、回帰アプローチではなく分類を取ることを検討しましたか?(クラスではなく実際の値を予測しているようです)。予測は完全である必要はないと述べているので、結果変数をビンにグループ化してから、ビンを予測してみませんか?はるかに細かい解決策がありますが、うまくいく場合があります。


一部の人はしばしば過大評価し、他の人は継続時間を過小評価することが観察されたため、主な目標は推定値を改善することです。それをビン分類問題に変更しても、この目標には到達しません。
ジャージー

クラスごとにスカラー/数値/係数を乗算することにより、分類をタスク期間の見積もりに変換することにより、期間を粗く見積もることができます。さらに、分類を使用して、特定のクラスのタスク専用の異なるmlモデルを選択して、より正確な推定値を取得できます。(しかし、これらの2つの手順が実際の答えに記載されていない)
で、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.