การทำนายและอัตราต่อรอง

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

Maarten Van den Broeck

Content Developer at DataCamp

การทำนายด้วย regplot()

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

plt.show()

กราฟกระจายของการเลิกใช้บริการเทียบกับเวลาตั้งแต่ซื้อครั้งล่าสุด พร้อมเส้นแนวโน้มโลจิสติก

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การทำนายค่า

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))
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การเพิ่มจุดทำนาย

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()

กราฟกระจายของการเลิกใช้บริการเทียบกับเวลาตั้งแต่ซื้อครั้งล่าสุด พร้อมเส้นแนวโน้มโลจิสติก โดยมีจุดแสดงผลลัพธ์จาก predict() ที่ตรงกับเส้นแนวโน้มพอดี

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การหาผลลัพธ์ที่น่าจะเป็นไปได้มากที่สุด

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

prediction_data["most_likely_outcome"] = np.round(prediction_data["has_churned"])
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การแสดงผลผลลัพธ์ที่น่าจะเป็นไปได้มากที่สุด

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()

กราฟกระจายของการเลิกใช้บริการเทียบกับเวลาตั้งแต่ซื้อครั้งล่าสุด พร้อมเส้นแนวโน้มโลจิสติก โดยมีจุดแสดงผลลัพธ์ที่น่าจะเป็นไปได้มากที่สุด หากเวลาน้อย ผลลัพธ์ที่น่าจะเป็นคือไม่เลิกใช้บริการ หากเวลามาก ผลลัพธ์ที่น่าจะเป็นคือเลิกใช้บริการ

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

อัตราต่อรอง

อัตราต่อรอง คือความน่าจะเป็นที่เหตุการณ์จะเกิดขึ้น หารด้วยความน่าจะเป็นที่เหตุการณ์จะไม่เกิดขึ้น

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

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

กราฟเส้นของอัตราต่อรองเทียบกับความน่าจะเป็น เส้นโค้งเพิ่มขึ้นแบบ asymptotic ไปสู่อนันต์เมื่อความน่าจะเป็นเข้าใกล้ 1

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การคำนวณอัตราต่อรอง

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

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การแสดงอัตราต่อรอง

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


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

กราฟเส้นของอัตราต่อรองเทียบกับเวลาตั้งแต่ซื้อครั้งล่าสุด พร้อมเส้นที่อัตราต่อรองเท่ากับ 1 เมื่อเวลาน้อย ผลลัพธ์ที่น่าจะเป็นคือไม่เลิกใช้บริการ อัตราต่อรองการเลิกใช้บริการเพิ่มขึ้นตามเวลา สูงสุดถึง 5 เท่าของอัตราต่อรองที่จะไม่เลิกใช้บริการ

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การแสดง log odds

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

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

plt.show()

กราฟเส้นของอัตราต่อรองเทียบกับเวลาตั้งแต่ซื้อครั้งล่าสุด พร้อมเส้นที่อัตราต่อรองเท่ากับ 1 แกน y ใช้สเกลลอการิทึม ซึ่งทำให้เส้นอัตราต่อรองกลายเป็นเส้นตรง

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การคำนวณ log odds

prediction_data["log_odds"] = np.log(prediction_data["odds"])
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

รวมทุกการทำนายไว้ด้วยกัน

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
... ... ... ... ...
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การเปรียบเทียบสเกล

สเกล ค่าตีความได้ง่ายหรือไม่ การเปลี่ยนแปลงตีความได้ง่ายหรือไม่ มีความแม่นยำหรือไม่
ความน่าจะเป็น
ผลลัพธ์ที่น่าจะเป็นมากที่สุด ✔✔
อัตราต่อรอง
Log odds
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

มาฝึกกันเถอะ!

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

Preparing Video For Download...