SSブログ

Tobit Model(トービット・モデル)で売上予測をしてみる [データサイエンス、統計モデル]

■ やりたい事
個人ごとの売上の合計を予測したい

■ 課題
個人の購買がない場合、売上が0となる。
0円の人がそこそこ多い。

■ 対処法
1. 買うか/買わないかを予測する。(model 1)
買った場合の売上を予測する。(model 2)
model 1 と model2を掛け合わせて、個人ごとの売上を予測する。

2. Tobit Model(トービット・モデル)を使う。

~以下、Tobit Model(トービット・モデル)について~
Tobit Model(トービット・モデル)は、元々、上限や下限がある場合の打ち切りデータに対して分析することができます。

(例)
数学と物理の点数の相関をモデル化して、
目的変数:数学の点数
説明変数:物理の点数
とします。

物理の点数でたくさん0点の人がいたと仮定します。



# サンプルデータの作成(100人分) math_score <- rnorm(100, mean=40, sd=20) physics_score <- 10 + 0.8 * math_score + rnorm(1, mean=0, sd=10) set.seed(1)
math_score <- rnorm(100, mean=50, sd=20)
physics_score <- -30 + 1.0 * math_score + rnorm(100, mean=0, sd=10)
# 真のモデル:切片-30, 傾き1.0
 
cor(math_score, physics_score) # 相関係数:0.882
 
math_score[math_score > 100] <- 100
math_score[math_score < 0] <- 0
physics_score[physics_score > 100] <- 100
physics_score[physics_score < 0] <- 0
df <- data.frame(physics_score, math_score)
 
# 線形回帰モデル
model.lm <- lm(physics_score ~ math_score, data=df)
summary(model.lm) # 推定された切片-19, 傾き0.83
 
plot(physics_score ~ math_score)
abline(model.lm)
 
# Tobit Model
library(VGAM)
 
model.tobit <- vglm(physics_score ~ math_score, data = df, tobit(Lower=0, Upper=100), trace=FALSE)
summary(model.tobit) # 推定された切片-31, 傾き1.01
 
plot(physics_score ~ math_score)
abline(model.lm)
abline(coef(model.tobit)[c(1,3)], col='red')




nice!(4)  コメント(0) 
共通テーマ:学問

nice! 4

コメント 0