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?
Antworten:
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:
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.
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.
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:
Die Poisson-Verteilung ist ein geeignetes Modell, wenn die folgenden Annahmen zutreffen.
Oder
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:
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?)
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!
quelle
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.
quelle