Beziehung zwischen der Genauigkeit der linearen Regressionsvorhersage und der Korrelation

7

Diese Frage ist eher theoretisch. Ich bin mir nicht sicher, ob dies der richtige Ort ist, versuche es aber trotzdem.

Ich habe zwei Variablen - direkte Kosten und indirekte Kosten. Wenn Verkäufer ein Verkaufsgespräch mit einem Kunden führen, wissen sie über die direkten Kosten Bescheid, die ihnen für diesen Service entstehen, aber sie wissen nicht viel über die indirekten Kosten (sie werden in späteren Phasen davon erfahren). Eine Schätzung der indirekten Kosten in dieser Phase ist für Verkäufer wertvoll.

Ich versuche, indirekte Kosten als Funktion der direkten Kosten vorherzusagen. Ich mache das über eine einfache lineare Regression. Ich habe ein Streudiagramm zwischen direkten und indirekten Kosten aufgezeichnet und sehe eine gute lineare Beziehung zwischen ihnen. Ich sehe auch, dass direkte und indirekte Kosten mit einem Korrelationskoeffizienten von 0,98 stark miteinander korrelieren, daher habe ich eine sehr gute Vorhersagegenauigkeit erwartet. Aber überraschenderweise ist meine Vorhersagegenauigkeit nicht so gut. Ich habe ungefähr 200.000 Punkte in meinen Trainingsdaten und der durchschnittliche Vorhersagefehler bei Trainingsdaten beträgt 17%. Der angepasste R-Quadrat-Wert beträgt jedoch 0,97. Ich benutze die lm()Funktion von R.

Meine Frage ist, ob wir im Falle einer einfachen linearen Regression im Allgemeinen eine bessere Vorhersagegenauigkeit erwarten sollten, wenn abhängige und unabhängige Variablen stark korrelieren, oder ist es mein Missverständnis? Wenn wir eine gute Genauigkeit erwarten, fehlt mir hier etwas. Bitte beachten Sie, dass ich auch versucht habe, diese Variablen um den Mittelwert zu zentrieren.

user3697157
quelle
3
Dies ist eine gute Frage ... für CrossValidated, die SE-Site für statistische Analysen. Ich habe Ihre Frage als geschlossen markiert und dorthin migriert.
TARehman
3
Ich bin gespannt, wie ein Modell mit 0,97 angepasstem R-Quadrat Ihnen eine so schlechte Vorhersagefähigkeit bietet. Was passiert, wenn Sie versuchen, den Trainingsdatensatz vorherzusagen? Verwenden Sie die predictFunktion oder versuchen Sie, die Koeffizienten manuell zu verwenden? Haben Sie einen Abschnitt in Ihrem Modell? Wenn Sie Ihre Daten nicht veröffentlichen möchten, sollten Sie ein Paar stark korrelierter Variablen simulieren, eine ähnliche Analyse durchführen und prüfen, ob Sie dasselbe Problem finden, wenn Sie genau denselben Prozess ausführen.
AntoniosK
@AntoniosK, sorry, es gab einen Tippfehler von meiner Seite! Die Genauigkeit, über die ich spreche, hängt von den Trainingsdaten selbst ab. Ich habe es gerade in meiner Frage bearbeitet. Ich habe die Funktion 'Predict ()' nicht verwendet. Das lm-Objekt liefert Fehler / Residuen für Trainingsdaten. Ich verwende Residuen für meine Analyse. Der Vorschlag zur Analyse simulierter Variablen sieht gut aus, ich werde es versuchen.
user3697157
Wie definieren Sie die Vorhersagegenauigkeit? In der Regel wird ein Maß für die Genauigkeit für qualitative abhängige Variablen (dh für Klassifizierungsprobleme) verwendet, nicht für Ihre abhängige Variable. ist kontinuierlich.
Chris
Ist es möglich, die Modellausgabe zu veröffentlichen und zu erklären, wie Sie diese 17% gefunden haben? @ Chris hat hier einen Punkt und ich denke, wir hatten ähnliche Gedanken. Ich denke auch, dass Sie die Vorhersagefähigkeit Ihres Modells sehen können, wenn Sie Vorhersagen treffen (Trainings- und Testdatensätze) und dann vorhergesagte Werte gegen die wahren Werte zeichnen.
AntoniosK

Antworten:

3

In einer linearen Regression versuchen Sie, die beste Anpassung eines Satzes von Ausgang als lineare Funktion von Eingang , dh Sie möchten das und , das die kleinsten Residuen ergibt:Y=(Y1,,Yn)X=(X1,,Xn)ab

(a,b)=argmini(YiaXib)2

wenn es das ist, was du getan hast und du es formell bekommst (wenn du immer noch mit den gleichen Beobachtungen arbeitest)n

a=argminVar(YaX),b=Y¯aX¯,andR2=var(aX)var(Y)=corr(X,Y)
(wobei für zwei beliebige Vektoren das empirische Mittel und die Korrelation).U,V U¯Var(U)corr(U,V)

Sie sagen nicht, wie Sie Ihre Fehler berechnen, aber wenn Sie berechnen , ist dies gleich Wenn Sie also die Fehler durch normalisieren, dann Sie habenvar(Yax)(1R2)var(Y)var(Y)

Error=var(Yax)var(Y)=1R2

was in Ihrem Fall 0,03 sein sollte (weil 0,97 ist). Aber was Sie getan haben (ich denke :)) ist, dass Sie den mittleren Mittelwertfehler geteilt durch die Standardabweichung der Ausgabe berechnet haben, die genau (gemäß meiner Definition).R2Error

Ihre Ergebnisse sind vollkommen korrekt und entsprechen der Theorie, weil

Error=0.03=0.1732051

nichts überraschendes!

CQFD

Robin Girard
quelle
Ich habe Fehler gemäß Ihren Gleichungen neu berechnet und mein Ergebnis stimmt mit diesen Gleichungen überein. Wie du sagst, sieht es jetzt nicht so überraschend aus :-).
user3697157
Ich habe gerade genug Privileg erhalten, um Upvote zu machen :-)
user3697157
Entschuldigung, ich habe gerade diesen Thread eingeholt ... Kann jemand erklären, wie der Durchschnittswert von Residuum / Y gemäß der oben aufgeführten Gleichung mit Fehler identisch ist? Der Fehler gemäß der obigen Gleichung ist eine Funktion der Varianz. Wie würde dies dem Mittelwert (Residuum / Y) entsprechen?
Chris
Hallo Chris, ich bin mir nicht sicher, ob ich deinen Standpunkt verstehe. Ich berechne nicht den Durchschnittswert von Residuum / Y? Vielleicht ist eine meiner Formulierungen unklar und sollte umformuliert werden?
Robin Girard
Die Art und Weise, wie der Fehler gemäß dem Benutzer berechnet wurde, der gestellt hat, war der Durchschnittswert des Residuums / y. Sie haben mit dieser Methode einen Vorhersagefehler von 17% erzielt. Ich dachte, Sie sagten, dies sei eine korrekte Methode zur Berechnung des Fehlers? Ich habe behauptet, dass der Mittelwert (Residuum / Vorhersage) kein guter Weg ist, um die Modellanpassung zu berechnen, und ich dachte, Sie sagten, es sei angemessen? Vielleicht fehlt mir hier etwas.
Chris
3

Ich glaube ich weiß was los ist. Intuitiv scheint Ihre Methode zur Berechnung des Vorhersagefehlers in Ordnung zu sein. Sie nehmen den Restwert (dh den Fehler) und sehen, wie groß er relativ zu Ihren Daten ist (dh entweder relativ zum vorhergesagten Wert oder zum Wert Ihrer abhängigen Variablen), indem Sie durch dividieren dieser Wert. Es gibt jedoch mindestens ein Problem mit der Berechnung von Fehlern auf diese Weise, das ich mir vorstellen kann: Wenn Sie durch den Wert der abhängigen Variablen dividieren, erwarten Sie, dass der Divisor nicht nahe Null ist - wenn dies der Fall ist, Ihr Residuum / (Ist) Wert) kann sehr groß werden, einfach weil der tatsächliche Wert ein Bruchteil sein kann (dh nahe Null ... z. B. 0,005). Ich habe die folgenden Simulationen durchgeführt und meinen Verdacht bestätigt:

# we'll run about 150 linear models. The x value will be closely related to the y value (linear relationship), meaning that if x is close to 0, y will be close to 0. The mean of the independent variable (x) is stored in the following vector:
seq(-50, 50, .7) -> mean_vals
# dataframe to save our regression results in:
data.frame(r_sqrd = NA, resid_over_value = NA, mean_vals = NA) -> frame

for(i in 1:length(mean_vals)){
    x <- rnorm(n = 1000, mean = mean_vals[i], sd = 10)
    x + rnorm(n = 1000, mean = 0, sd = 5) -> y
    lm(formula = y ~ x) -> k
    # This - or some close relative of this - is how you are calculating error 
    k$residuals/y -> z
mean(z) -> frame[i,"resid_over_value"]
# THe Rsquared value is a much more typical measure of fit/prediction error for a linear model:
summary(k)$r.squared -> frame[i, "r_sqrd"]
    # Put the mean of the x values in the frame so we can see how your method of prediction error changes as a function of mean
    mean_vals[i] -> frame[i, "mean_val"]
}

Wie Sie in der folgenden Darstellung sehen können, erhöht sich Ihre Fehlermethode nicht in Abhängigkeit von Rsquared (was an sich ein Problem ist, obwohl ich nicht 100% sicher bin, warum dies geschieht) ... Das Problem, das ich habe fokussiert auf hatte mit den Ausreißern in der folgenden Grafik zu tun.

plot(frame$r_sqrd, frame$resid_over_value, xlab = "Rsquared", ylab = "Error according to your method")

Geben Sie hier die Bildbeschreibung ein

... Diese Punkte treten im Allgemeinen auf, wenn der Mittelwert der Prädiktorvariablen nahe Null liegt, wie in der folgenden Grafik dargestellt:

plot(frame$mean_val, frame$resid_over_value, xlab = "Mean of independent variable", ylab = "Error according to your method")

Geben Sie hier die Bildbeschreibung ein

Abschließend schlage ich vor, dass Sie eine Standardversion des Modellanpassungs- / Vorhersagefehlers verwenden, z. B. den mittleren quadratischen Fehler (MSE) oder den quadratischen Fehler.

Chris
quelle
Das sind großartige und sehr nützliche Informationen für @ user3697157, um mehr zu untersuchen. Er gab jedoch an, dass er mit Kosten arbeitet, daher erwarte ich keine negativen Werte, aber definitiv einige nahe Null. Dies stimmt mit meiner Annahme überein, dass einige / wenige Fälle möglicherweise große Fehler erzeugen (wie er sie definiert hat) und den mittleren Vorhersagefehler erhöhen. Vielleicht sind diese wenigen Fälle diejenigen, deren Kosten nahe Null liegen.
AntoniosK
@ Chris, danke! Während der ersten Analyse habe ich festgestellt, dass der prozentuale Fehler höher ist, wenn abhängige Werte nahe Null sind. Aus diesem Grund passe ich das Regressionsmodell nur an die Daten an, für die abhängige Werte mehr als 10000 betragen. 'RegData1 <- Teilmenge (regData, Direct.Cost> 10000)' Basierend auf Ihrer Antwort habe ich den Fehler erneut analysiert. Ich kann sehen, dass immer noch prozentuale Fehler höher sind, wenn der abhängige Wert klein ist (zwischen 10.000 und 100.000) und er für akzeptable Werte in einem akzeptablen Bereich liegt. Ich muss meinen Ansatz überdenken. Mein abhängiger Wert reicht von null bis Millionen.
user3697157
@ AntoniosK, ja. Nur wenige meiner Fälle (mit kleineren abhängigen Werten) erzeugen ungewöhnlich hohe Fehler. Ich überdenke meinen Ansatz. Anregungen sind willkommen!
user3697157