Home

Lineare Regression

"Bei der einfachen linearen Regression wird eine abhängige Variable durch eine lineare Funktion einer einzigen unabhängigen Variablen erklärt. Ziel ist die Schätzung von Achsenabschnitt und Steigung der Regressionsgeraden." - Wikipedia

Um die lineare Regression zu erklären soll diese exemplarisch angewand werden.
Dies soll anhand realer Daten geschehen.
Datenquelle: Die Budgets und WM-Punkte der Teams der Formel 1 Saison 2018, siehe folgende Tabelle.
Unabhänige Variable: Points
Abhängige Variable: Budget

In [10]:
import pandas as pd
data = pd.read_csv('f1data.csv')
print(data)
   Budget  Points                             Team
0     360     571                 Scuderia Ferrari
1     351     655              Mercedes Grand Prix
2     272     419                  Red Bull Racing
3     167     122                       Renault F1
4     114      93                          Haas F1
5     193      62                   McLaren Racing
6     105     109       Force India (Racing Point)
7     119      48                Alfa Romeo Sauber
8     132      33              Scuderia Toro Rosso
9     132       7  Williams Grand Prix Engineering

Herleitung der geschätzte Regressionskoeffizienten

\begin{align*} coefficient1 = \frac{\sum_{i=1}^{n} (x_i -\bar{x})(y_i -\bar{y})}{\sum_{i=1}^{n} (x_i -\bar{x})^2} \end{align*}\begin{align*} coefficient2 = \bar{y} - coefficient1 * \bar{x} \end{align*}
\begin{align*} \bar{x},\bar{y} = Budget Mittelwert,Points Mittelwert \end{align*}\begin{align*} x_i,y_i = Budget,Points \end{align*}

Implementierung Variante 1

Der Algorithmus der linearen Regression in Python unter minimalem Einsatz von externen Paketen.

In [17]:
means = data.mean(axis = 0, skipna = True)
budgetMean = means[0]
pointsMean = means[1]
denominator = 0
numerator = 0

for index, row in data.iterrows():
    denominator += (row['Budget'] - budgetMean) * (row['Points'] - pointsMean)
    numerator += (row['Budget'] - budgetMean)**2
    
coefficients = denominator/numerator
intercept = pointsMean - coefficients * budgetMean

print("Coefficients: ", coefficients)
print("Intercept: ", intercept)
Coefficients:  2.3388959094292594
Intercept:  -243.01525438399094

Implementierung Variante 2

Das Paket sklearn bietet bereits eine Funktion für die lineare Regression.

In [18]:
from sklearn.linear_model import LinearRegression
X = data.iloc[:, 0].values.reshape(-1, 1)
Y = data.iloc[:, 1].values.reshape(-1, 1)
linear_regressor = LinearRegression()
linear_regressor.fit(X, Y)
Y_pred = linear_regressor.predict(X)
print("Coefficients: ", linear_regressor.coef_)
print("Intercept: ", linear_regressor.intercept_)
Coefficients:  [[2.33889591]]
Intercept:  [-243.01525438]

Ergebnis

Die Regressionsgleichung lautet:
$$ Budget = 2.3253652 * Points - 241.31367803 $$

Visualisierung

Die blauen Punkte stehen für die Datenpunkte(Budget/Points) der Teams.
Die rote Line ist die ermittelte Regressionsgerade.

In [20]:
import matplotlib.pyplot as plt
plt.scatter(X, Y)
plt.plot(X, Y_pred, color='red')
plt.xlabel("Budget")
plt.ylabel("Points")
plt.show()
Impressum