Voorspellingen maken

Introductie tot regressie met statsmodels in Python

Maarten Van den Broeck

Content Developer at DataCamp

De fish-dataset: brasem

bream = fish[fish["species"] == "Bream"]
print(bream.head())
  species  mass_g  length_cm
0   Bream   242.0       23.2
1   Bream   290.0       24.0
2   Bream   340.0       23.9
3   Bream   363.0       26.3
4   Bream   430.0       26.5

Brasem, _Abramis brama_

Introductie tot regressie met statsmodels in Python

Massa vs. lengte plotten

sns.regplot(x="length_cm",
            y="mass_g",
            data=bream,
            ci=None)

plt.show()

Een spreidingsdiagram van brasem-massa versus lengte met een lineaire trendlijn. De punten liggen dicht bij de trendlijn.

Introductie tot regressie met statsmodels in Python

Het model draaien

mdl_mass_vs_length = ols("mass_g ~ length_cm", data=bream).fit()

print(mdl_mass_vs_length.params)
Intercept   -1035.347565
length_cm      54.549981
dtype: float64
Introductie tot regressie met statsmodels in Python

Data met verklarende waarden om te voorspellen

Als ik de verklarende variabelen op deze waarden zet,
welke waarde krijgt de responsvariabele?

explanatory_data = pd.DataFrame({"length_cm": np.arange(20, 41)})
    length_cm
0          20
1          21
2          22
3          23
4          24
5          25
     ...
Introductie tot regressie met statsmodels in Python

predict() aanroepen

print(mdl_mass_vs_length.predict(explanatory_data))
0       55.652054
1      110.202035
2      164.752015
3      219.301996
4      273.851977
    ...
16     928.451749
17     983.001730
18    1037.551710
19    1092.101691
20    1146.651672
Length: 21, dtype: float64
Introductie tot regressie met statsmodels in Python

Voorspellen in een DataFrame

explanatory_data = pd.DataFrame(
  {"length_cm": np.arange(20, 41)}
)

prediction_data = explanatory_data.assign( mass_g=mdl_mass_vs_length.predict(explanatory_data) )
print(prediction_data)
    length_cm         mass_g
0          20      55.652054
1          21     110.202035
2          22     164.752015
3          23     219.301996
4          24     273.851977
..        ...            ...
16         36     928.451749
17         37     983.001730
18         38    1037.551710
19         39    1092.101691
20         40    1146.651672
Introductie tot regressie met statsmodels in Python

Voorspellingen tonen

import matplotlib.pyplot as plt
import seaborn as sns
fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            ci=None,
            data=bream,)
sns.scatterplot(x="length_cm",
                y="mass_g",
                data=prediction_data, 
                color="red",
                marker="s")
plt.show()

Spreidingsdiagram van brasem-massa versus lengte met een lineaire trendlijn. De plot is geannoteerd met punten berekend met predict(). Deze punten liggen precies op de trendlijn.

Introductie tot regressie met statsmodels in Python

Extrapoleren

Extrapoleren betekent voorspellen buiten het bereik van de geobserveerde data.

little_bream = pd.DataFrame({"length_cm": [10]})

pred_little_bream = little_bream.assign(
    mass_g=mdl_mass_vs_length.predict(little_bream))

print(pred_little_bream)
   length_cm      mass_g
0         10 -489.847756

Spreidingsdiagram van brasem-massa versus lengte met een lineaire trendlijn. De plot is geannoteerd met een fictieve brasem van 10 cm en diens voorspelde massa.

Introductie tot regressie met statsmodels in Python

Laten we oefenen!

Introductie tot regressie met statsmodels in Python

Preparing Video For Download...