Ich versuche, ein Regressionsmodell zu erstellen, das die Dauer einer Aufgabe vorhersagt. Die Trainingsdaten, die ich habe, bestehen aus ungefähr 40.000 erledigten Aufgaben mit diesen Variablen:
- Wer hat die Aufgabe ausgeführt (~ 250 verschiedene Personen)
- Für welchen Teil (Teilprojekt) des Projekts wurde die Aufgabe ausgeführt (~ 20 verschiedene Teile)?
- Die Art der Aufgabe
- Das Startdatum der Aufgabe (Daten im Wert von 10 Jahren)
- Wie lange die Person, die die Aufgabe erledigen muss, schätzt, wird es dauern
- Die tatsächliche Dauer dieser Aufgabe
Die Dauer kann zwischen einer halben Stunde und einigen hundert Stunden variieren, ist jedoch stark verzerrt (die meisten Aufgaben werden innerhalb von 10 Stunden erledigt). Auf der Log-Skala ist die Verteilung immer noch leicht nach rechts geneigt.
Die Vorhersage muss nicht perfekt sein, aber ich versuche, die Schätzungen der Leute zu verbessern. Eine zu stellende Frage lautet: "Mit welcher Maßnahme können wir den definierten Bieter verwenden ?" Ich denke, das beste Maß wäre der Mean Squared Error (MSE), da er große Fehler viel schlimmer wiegt als kleine Fehler.
Bevor ich mich dem maschinellen Lernen zuwandte, versuchte ich einige einfache Ansätze, wie das Anpassen der Schätzung um den Durchschnitts- oder Medianfehler, das Anpassen um den Durchschnitts- / Medianfehler, gruppiert nach Person, gruppiert nach Teilprojekt, aber jeder dieser Ansätze schnitt zufällig schlechter ab.
Beim maschinellen Lernen war eines der ersten Probleme, auf das ich stieß, die Anzahl der kategorialen Variablen, da diese für die meisten Modelle irgendwie codiert werden müssen (z. B. One-Hot). Wie auch immer, ich habe versucht, einige lineare Modelle anzuwenden, zum Beispiel mit Stochastic Gradient Descent. Mein Ansatz wäre:
- One-Hot-Codierung der kategorialen Funktionen
- Das Datum wurde in Unix-Zeitstempel konvertiert
- Normalisieren Sie alle Funktionen, die noch nicht zwischen 0 und 1 liegen
- Teilen Sie die Daten in 80/20 Lern- und Testsätze auf.
- Versuchen Sie mit der Kreuzvalidierung von Grid Search und dem Lernsatz, die besten Hyperparameter zu finden und das Modell anzupassen.
- Mit dem Testsatz vorhersagen
- Berechnen Sie den Fehler / die Punktzahl
Jetzt fiel mir auf, dass die Ergebnisse sehr unterschiedlich waren: Bei einem Lauf war die MSE fast doppelt so hoch wie bei einem anderen Lauf (150 und 280). Eine andere Sache ist, dass die MSE der Schätzung der Leute ungefähr 80 ist, also schneidet mein Modell etwas schlechter ab.
Während meiner Bemühungen, die Leistung zu verbessern, bin ich auf diese Frage gestoßen , bei der jemand vorschlägt, Überlebensmodelle zu verwenden. Jetzt bin ich mit solchen Modellen nicht vertraut, aber es klang vielversprechend, aber bei meinen ersten Tests stellte sich heraus, dass es für meine Zwecke viel zu langsam ist (zu großer Datensatz).
In derselben Antwort von Datascience, in der vorgeschlagen wurde, die Überlebensmodelle (und die Wikipedia-Seite ) zu verwenden, wurde auch die Poisson-Regression erwähnt, aber ich bin mir nicht sicher, wie ich dies auf meinen Fall anwenden würde.
Kurz gesagt: Ich habe nur zwei Fragen: 1. War mein Ansatz, SGD zu verwenden, „richtig“ und glauben Sie, dass ich damit die Ergebnisse verbessern kann? 2. Sind andere Modelle besser für diese Art der Vorhersage geeignet und wenn ja, können Sie ein wenig erklären, wie ich sie verwenden würde?