Vorhersage der Aufgabendauer


9

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:

  1. One-Hot-Codierung der kategorialen Funktionen
  2. Das Datum wurde in Unix-Zeitstempel konvertiert
  3. Normalisieren Sie alle Funktionen, die noch nicht zwischen 0 und 1 liegen
  4. Teilen Sie die Daten in 80/20 Lern- und Testsätze auf.
  5. Versuchen Sie mit der Kreuzvalidierung von Grid Search und dem Lernsatz, die besten Hyperparameter zu finden und das Modell anzupassen.
  6. Mit dem Testsatz vorhersagen
  7. 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?


Vielleicht ein bisschen abseits des Themas, aber wir sind daran interessiert, ein Ensemble für die Schätzung der Aufgabendauer aufzubauen. Daher haben wir uns gefragt, ob es eine Chance gibt, dass Sie Ihren Datensatz (und das Modell, das Sie am Ende erstellen) teilen können.
am

1
Leider wurde das Projekt nach einer kurzen Erkundungsphase eingemacht. Der Datensatz kann auch nicht freigegeben werden. Ich bin mir nicht mal sicher, ob ich noch darauf zugreifen kann, um ehrlich zu sein. Aber viel Glück! Ich habe seitdem viel über Datenwissenschaft im Allgemeinen gesehen und gelernt, aber ich habe noch keine richtige Architektur für diese Aufgabe gefunden.
Jurgy

1
Vielen Dank für die Erklärung! microsoft.com/en-us/research/uploads/prod/2019/01/… scheint erfolgreiche Architekturen erstellt zu haben.
am

Wirklich interessant! Die Funktionen, die sie verwendet haben, sind sehr nahe an dem, was ich verwenden konnte. Obwohl ihre Aufgaben nur in vier eher kleinen Eimern zusammengefasst sind: <30 m, 30 m, 1 h und> 1 h. Ich frage mich, wie es in meinem Fall funktionieren würde, wenn einige Aufgaben etwa 1 bis 4 Stunden dauern und andere einige Wochen dauern könnten. Wenn es trotzdem möglich ist, lass es mich wissen, wenn du mit deinem Projekt erfolgreich bist!
Jurgy

Antworten:


6

Ich denke, die Analyse, die Sie durchgeführt haben, war gut.

In Bezug auf das Überlebensanalyseverfahren denke ich, dass die Verwendung in Ihrem Szenario gut genug ist. Auch wenn es einige Zeit dauern mag, sind die Ergebnisse gut und sehr aufschlussreich.

Da Sie eine Überlebensanalyse auf die Daten angewendet haben, müssen Sie sicherstellen, dass diese Annahmen erfüllt sind:

  1. Es gibt verschiedene Möglichkeiten, eine Überlebensfunktion oder eine Überlebenskurve abzuschätzen. Es gibt eine Reihe gängiger parametrischer Methoden, die zur Modellierung von Überlebensdaten verwendet werden, und sie unterscheiden sich hinsichtlich der Annahmen, die über die Verteilung der Überlebenszeiten in der Bevölkerung getroffen werden. Einige beliebte Verteilungen umfassen Exponential-, Weibull-, Gompertz- und logarithmische Normalverteilungen.

  2. Am beliebtesten ist vielleicht die Exponentialverteilung, bei der davon ausgegangen wird, dass die Wahrscheinlichkeit, dass ein Teilnehmer unter dem Ereignis von Interesse leidet, unabhängig davon ist, wie lange diese Person ereignisfrei war. Andere Verteilungen machen andere Annahmen über die Wahrscheinlichkeit, dass eine Person ein Ereignis entwickelt (dh es kann sich im Laufe der Zeit erhöhen, verringern oder ändern). Weitere Einzelheiten zu parametrischen Methoden für die Überlebensanalyse finden sich in Hosmer und Lemeshow sowie Lee und Wang1.

  3. Hier zwei nichtparametrische Methoden, die keine Annahmen darüber treffen, wie sich die Wahrscheinlichkeit, dass eine Person das Ereignis entwickelt, im Laufe der Zeit ändert. Mit nichtparametrischen Methoden schätzen und zeichnen wir die Überlebensverteilung oder die Überlebenskurve. Überlebenskurven werden häufig als Schrittfunktionen dargestellt, wie in der folgenden Abbildung gezeigt. Die Zeit wird auf der X-Achse und das Überleben (Anteil der gefährdeten Personen) auf der Y-Achse angezeigt. Beachten Sie, dass der Prozentsatz der überlebenden Teilnehmer nicht immer den Prozentsatz der Lebenden darstellt (was davon ausgeht, dass das Ergebnis des Interesses der Tod ist). "Überleben" kann sich auch auf den Anteil beziehen, der frei von einem anderen Ergebnisereignis ist (z. B. Prozentsatz frei von MI oder Herz-Kreislauf-Erkrankungen), oder es kann sich auch auf den Prozentsatz beziehen, bei dem kein gesundes Ergebnis erzielt wird (z. B. Krebsremission).

Sie können diesen Link zum besseren Verständnis durchgehen .

Haben Sie in Bezug auf die Poisson-Verteilung geplottet und überprüft, ob die Daten der Poisson-Verteilung folgen, wie:

Geben Sie hier die Bildbeschreibung ein

Die Poisson-Verteilung ist ein geeignetes Modell, wenn die folgenden Annahmen zutreffen.

  • k ist die Häufigkeit, mit der ein Ereignis in einem Intervall auftritt, und k kann die Werte 0, 1, 2,… annehmen.
  • Das Auftreten eines Ereignisses hat keinen Einfluss auf die Wahrscheinlichkeit, dass ein zweites Ereignis auftritt. Das heißt, Ereignisse treten unabhängig voneinander auf.
  • Die Rate, mit der Ereignisse auftreten, ist konstant. Die Rate kann in einigen Intervallen nicht höher und in anderen Intervallen nicht niedriger sein.
  • Zwei Ereignisse können nicht genau zum gleichen Zeitpunkt auftreten. Stattdessen tritt in jedem sehr kleinen Teilintervall genau ein Ereignis auf oder nicht.
  • Die Wahrscheinlichkeit eines Ereignisses in einem kleinen Teilintervall ist proportional zur Länge des Teilintervalls.

Oder

  • Die tatsächliche Wahrscheinlichkeitsverteilung wird durch eine Binomialverteilung angegeben, und die Anzahl der Versuche ist ausreichend größer als die Anzahl der Erfolge, nach denen man fragt

Wenn diese Bedingungen erfüllt sind, können Sie das Poisson-Modell verwenden. Gehen Sie über diesen Link

Implementierung in R , Python .

Um Ihre 2 Fragen zu beantworten:

  1. Ihr Ansatz ist Richtig. Es gibt kein Problem mit dieser Methode. Um Ihre Ergebnisse zu verbessern, müssen Sie an Feature Engg arbeiten (Ableiten neuer Variablen). Da Sie die Dauer als kontinuierliche Variable betrachten (haben Sie diese Protokolltransformation durchgeführt, die hast du am anfang angegeben?)

  2. In Ihrem Szenario liefern Survival und Poisson meiner Meinung nach bessere Ergebnisse. Wenn Sie der Meinung sind, dass diese mehr Zeit in Anspruch nehmen, versuchen Sie, eine Stichprobe von Daten zu erhalten und Ihre Arbeit zu erledigen. Wenn Sie das Ergebnis als kontinuierliche Variable betrachten, können Sie Random Forest, XGBoost, alle Methoden verwenden, die zur Vorhersage einer kontinuierlichen Variablen verwendet werden (aber wenn Sie es wären, würde ich mehr Zeit damit verbringen, Survival und Poisson anzupassen und dann zu wechseln andere Vorhersagetechniken)

Lassen Sie mich wissen, wenn Sie irgendwelche Probleme haben!


1

SGD ist höchstwahrscheinlich kein einschränkender Faktor für Sie. Aber haben Sie darüber nachgedacht, eher eine Klassifizierung als einen Regressionsansatz zu wählen? (Es sieht so aus, als würden Sie reale Werte im Gegensatz zu Klassen vorhersagen.) Da Sie angeben, dass die Vorhersage nicht perfekt sein muss, können Sie versuchen, Ihre Ergebnisvariable in Bins zu gruppieren und dann die Bins vorherzusagen. Sie haben eine weitaus weniger detaillierte Lösung, aber möglicherweise funktioniert sie.


Das Hauptziel besteht darin, die Schätzungen zu verbessern, da festgestellt wurde, dass einige Personen die Dauer häufig überschätzen, während andere die Dauer häufig unterschätzen. Wenn Sie es in ein klassifiziertes Klassifizierungsproblem ändern, wird dieses Ziel nicht erreicht.
Jurgy

Durch Konvertieren der Klassifikationen in eine Aufgabendauerschätzung durch Multiplikation mit einem Skalar / einer Zahl / einem Koeffizienten pro Klasse könnte die Dauer grob geschätzt werden. Darüber hinaus könnte die Klassifizierung verwendet werden, um verschiedene ml-Modelle auszuwählen, die dieser bestimmten Aufgabenklasse gewidmet sind, um eine genauere Schätzung zu erhalten. (aber diese 2 Schritte sind in der Tat nicht in der Antwort aufgeführt)
am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.