Voorspellingen en odds

Introductie tot regressie met statsmodels in Python

Maarten Van den Broeck

Content Developer at DataCamp

De voorspellingen van regplot()

sns.regplot(x="time_since_last_purchase",
            y="has_churned",
            data=churn,
            ci=None,
            logistic=True)

plt.show()

Een spreidingsdiagram van churn versus tijd sinds laatste aankoop, met een logistische trendlijn.

Introductie tot regressie met statsmodels in Python

Voorspellingen maken

mdl_recency = logit("has_churned ~ time_since_last_purchase",
                    data = churn).fit()


explanatory_data = pd.DataFrame( {"time_since_last_purchase": np.arange(-1, 6.25, 0.25)})
prediction_data = explanatory_data.assign( has_churned = mdl_recency.predict(explanatory_data))
Introductie tot regressie met statsmodels in Python

Puntvoorspellingen toevoegen

sns.regplot(x="time_since_last_purchase",
            y="has_churned",
            data=churn,
            ci=None,
            logistic=True)

sns.scatterplot(x="time_since_last_purchase",
                y="has_churned",
                data=prediction_data,
                color="red")

plt.show()

Het spreidingsdiagram van churn versus tijd sinds laatste aankoop, met een logistische trendlijn. De plot is geannoteerd met de resultaten van predict(), die de trendlijn exact volgen.

Introductie tot regressie met statsmodels in Python

Meest waarschijnlijke uitkomst bepalen

prediction_data = explanatory_data.assign(
    has_churned = mdl_recency.predict(explanatory_data))

prediction_data["most_likely_outcome"] = np.round(prediction_data["has_churned"])
Introductie tot regressie met statsmodels in Python

Meest waarschijnlijke uitkomst visualiseren

sns.regplot(x="time_since_last_purchase",
            y="has_churned",
            data=churn,
            ci=None,
            logistic=True)

sns.scatterplot(x="time_since_last_purchase",
                y="most_likely_outcome",
                data=prediction_data,
                color="red")

plt.show()

Een spreidingsdiagram van churn versus tijd sinds laatste aankoop, met een logistische trendlijn. De meest waarschijnlijke uitkomsten zijn geannoteerd. Bij een korte tijd sinds laatste aankoop is niet churnen het meest waarschijnlijk. Bij een lange tijd is churnen het meest waarschijnlijk.

Introductie tot regressie met statsmodels in Python

Odds

Odds is de kans dat iets gebeurt gedeeld door de kans dat het niet gebeurt.

$$ \text{odds} = \frac{\text{probability}}{(1 - \text{probability)}} $$

$$ \text{odds} = \frac{0.25}{(1 - 0.25)} = \frac{1}{3} $$

Een lijngrafiek van odds versus kans. De curve stijgt asymptotisch naar oneindig naarmate de kans 1 nadert.

Introductie tot regressie met statsmodels in Python

Odds berekenen

prediction_data["odds"] = prediction_data["has_churned"] / 
                            (1 - prediction_data["has_churned"])

Introductie tot regressie met statsmodels in Python

Odds visualiseren

sns.lineplot(x="time_since_last_purchase",
             y="odds",
             data=prediction_data)


plt.axhline(y=1, linestyle="dotted")
plt.show()

Een lijngrafiek van odds versus tijd sinds laatste aankoop, met een lijn bij odds gelijk aan 1. Bij een korte tijd sinds laatste aankoop is niet churnen het meest waarschijnlijk. De odds op churn nemen toe naarmate de tijd toeneemt, tot vijf keer de odds op niet churnen.

Introductie tot regressie met statsmodels in Python

Log-odds visualiseren

sns.lineplot(x="time_since_last_purchase",
             y="odds",
             data=prediction_data)

plt.axhline(y=1,
            linestyle="dotted")
plt.yscale("log")

plt.show()

De lijngrafiek van odds versus tijd sinds laatste aankoop, met een lijn bij odds gelijk aan 1. De y-as is logaritmisch, waardoor de oddslijn lineair wordt.

Introductie tot regressie met statsmodels in Python

Log-odds berekenen

prediction_data["log_odds"] = np.log(prediction_data["odds"])
Introductie tot regressie met statsmodels in Python

Alle voorspellingen samen

time_since_last_prchs has_churned most_likely_rspns odds log_odds
0 0.491 0 0.966 -0.035
2 0.623 1 1.654 0.503
4 0.739 1 2.834 1.042
6 0.829 1 4.856 1.580
... ... ... ... ...
Introductie tot regressie met statsmodels in Python

Schalen vergelijken

Schaal Zijn waarden makkelijk te lezen? Zijn veranderingen makkelijk te lezen? Is precies?
Kans
Meest waarschijnlijke uitkomst ✔✔
Odds
Log-odds
Introductie tot regressie met statsmodels in Python

Laten we oefenen!

Introductie tot regressie met statsmodels in Python

Preparing Video For Download...