預測與勝算比

R 迴歸入門

Richie Cotton

Data Evangelist at DataCamp

ggplot 的預測

plt_churn_vs_recency_base <- ggplot(
  churn, 
  aes(time_since_last_purchase, has_churned)
) +
  geom_point() +
  geom_smooth(
    method = "glm", 
    se = FALSE, 
    method.args = list(family = binomial)
  )

流失率對上次購買間隔的散佈圖,含邏輯斯迴歸趨勢線。

R 迴歸入門

進行預測

mdl_recency <- glm(
  has_churned ~ time_since_last_purchase, data = churn, family = "binomial"
)
explanatory_data <- tibble(
  time_since_last_purchase = seq(-1, 6, 0.25)
)
prediction_data <- explanatory_data %>% 
  mutate(
    has_churned = predict(mdl_recency, explanatory_data, type = "response")
  )
R 迴歸入門

加入點狀預測

plt_churn_vs_recency_base +
  geom_point(
    data = prediction_data, 
    color = "blue"
  )

流失率對上次購買間隔的散佈圖,含邏輯斯迴歸趨勢線。圖上標示 `predict()` 的結果,完全貼合趨勢線。

R 迴歸入門

取得最可能結果

prediction_data <- explanatory_data %>% 
  mutate(
    has_churned = predict(mdl_recency, explanatory_data, type = "response"),
    most_likely_outcome = round(has_churned)
  )
R 迴歸入門

視覺化最可能結果

plt_churn_vs_recency_base +
  geom_point(
    aes(y = most_likely_outcome),
    data = prediction_data,
    color = "green"
  )

流失率對上次購買間隔的散佈圖,含邏輯斯迴歸趨勢線。圖上標示最可能結果:間隔短時,多為未流失;間隔長時,多為已流失。

R 迴歸入門

勝算比(odds ratio)

「勝算比」是事件發生的機率,除以不發生的機率。

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

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

勝算比對機率的折線圖。當機率趨近 1,曲線漸近趨向無窮大。

R 迴歸入門

計算勝算比

prediction_data <- explanatory_data %>%
  mutate(
    has_churned = predict(mdl_recency, explanatory_data, type = "response"),
    most_likely_response = round(has_churned),
    odds_ratio = has_churned / (1 - has_churned)
  )
R 迴歸入門

視覺化勝算比

ggplot(
  prediction_data, 
  aes(time_since_last_purchase, odds_ratio)
) +
  geom_line() +
  geom_hline(yintercept = 1, linetype = "dotted")

勝算比對上次購買間隔的折線圖,並畫出勝算比等於 1 的水平線。間隔短時,最可能為未流失;隨著間隔增加,流失的勝算上升,最高約為未流失的 5 倍。

R 迴歸入門

視覺化對數勝算比

ggplot(
  prediction_data, 
  aes(time_since_last_purchase, odds_ratio)
) +
  geom_line() +
  geom_hline(yintercept = 1, linetype = "dotted") +
  scale_y_log10()

勝算比對上次購買間隔的折線圖,並畫出勝算比等於 1 的水平線。y 軸採對數刻度,使勝算比曲線呈線性。

R 迴歸入門

計算對數勝算比

prediction_data <- explanatory_data %>%
  mutate(
    has_churned = predict(mdl_recency, explanatory_data, type = "response"),
    most_likely_response = round(has_churned),
    odds_ratio = has_churned / (1 - has_churned),
    log_odds_ratio = log(odds_ratio),
    log_odds_ratio2 = predict(mdl_recency, explanatory_data)
  )
R 迴歸入門

彙整所有預測

tm_snc_lst_prch has_churned most_lkly_rspns odds_ratio log_odds_ratio log_odds_ratio2
0 0.491 0 0.966 -0.035 -0.035
2 0.623 1 1.654 0.503 0.503
4 0.739 1 2.834 1.042 1.042
6 0.829 1 4.856 1.580 1.580
... ... ... ... ... ...
R 迴歸入門

刻度比較

刻度 值是否好理解? 變化是否好理解? 是否精確?
Probability
Most likely outcome ✔✔
Odds ratio
Log odds ratio
R 迴歸入門

一起來練習吧!

R 迴歸入門

Preparing Video For Download...