「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料
TRANSCRIPT
![Page 1: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/1.jpg)
「ビジネス活用事例で学ぶデータサイエンス入門」輪読会 #5
53 PAGES
Shintaro Nomura
R で 学 ぶ
2016.03.25 @ Akiba Code
![Page 2: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/2.jpg)
Rのダウンロード
「r download」で検索
(3/25時点での最新版は 3.2.3 です。)
または
http://j.mp/downloadr を参照
すでにインストールしていた方は3.2.3へ
の更新をオススメします
2
![Page 3: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/3.jpg)
本書で用いるデータ
「DL76333.zip」が以下にあります
http://www.sbcr.jp/support/11915.html
zipファイルを解凍したファイルは、
作業ディレクトリに入れるとラクですよ
3
![Page 4: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/4.jpg)
作業ディレクトリって?
データが入ったテキストファイル等から、データや
プログラムを読みこんだり、画像を書き出したりし
ます。これらのファイルのある場所を「作業ディレ
クトリ」といいます。
データは作業ディレクトリに入っていると便利!
作業ディレクトリを変えたいときは、
「File > Change dir…(ディレクトリの変更)」
またはコマンド: setwd(“C:/指定先”)
4
![Page 5: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/5.jpg)
データ分析の模範フロー(復習)
現状と
あるべ
き姿
問題
発見
データ
収集と
加工
データ
分析
アク
ション
5
ギャップから問題の構造を把握
![Page 6: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/6.jpg)
現状とあるべき姿(1)
現状と
あるべ
き姿
問題
発見
データ
収集と
加工
データ
分析
アク
ション
6
ギャップから問題の構造を把握
![Page 7: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/7.jpg)
現状とあるべき姿(2)
現状
携帯電話(FP)のユーザ減
少量と比較して、スマホ
(SP)ユーザの増加量が少
ないように感じる
もしかしたら、ID移行に
失敗しているのでは…?
あるべき姿
携帯電話(FP)のユーザ減
少を、スマホ(SP)ユーザ
の増加量で補う状態
FP→SPへのユーザの移行
に成功している
7
今回の「仮説」
![Page 8: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/8.jpg)
分析結果によるアクション決定
現状と
あるべ
き姿
問題
発見
データ
収集と
加工
データ
分析
アク
ション
8
ギャップから問題の構造を把握
![Page 9: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/9.jpg)
把握した問題と、分析による対応
ID移行失敗の影響=大
他の開発案件を中止し、
ID移行システムの改修や
UIの改善に注力
ID移行失敗の影響=小
ID移行システムの改修よ
りも、スマホ(SP)向けプ
ロモーション施策を見直
す(広告予算増など)
9
![Page 10: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/10.jpg)
では、分析ロジックは?
現状と
あるべ
き姿
問題
発見
データ
収集と
加工
データ
分析
アク
ション
10
ギャップから問題の構造を把握
![Page 11: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/11.jpg)
今回の分析ロジック
ID移行失敗の影響=大
ID移行の失敗による「離
脱」ユーザが、自然離脱に
比べて非常に多くなる
離脱ユーザと移行失敗ユー
ザとの間の1月アクセス状
況に差異がなくなる
ID移行失敗の影響=小
ID移行の失敗による「離
脱」ユーザが、自然離脱
に比べて少ない
両者のアクセス数の差異
がはっきり出る!
11
![Page 12: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/12.jpg)
今回の分析ロジック(2)
ID移行失敗の影響=大 ID移行失敗の影響=小
12
![Page 13: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/13.jpg)
そんなの無理筋じゃない?
ID移行失敗の影響=大 ID移行失敗の影響=小
13
・「アクセス数が多い離脱」が増えたら「モデルを作れない」…?・モデルが作れたら「ID移行失敗による離脱が大きい可能性…?
![Page 14: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/14.jpg)
ちょっと言ってる意味分からないです
そもそもその「モデル」の構築手法を誤って
いたら、結論だって誤りますよね
仕方ないので以下では、引き続きテキストを使
用して、
データ加工の手法
「ロジスティック回帰」とは何か
について進めていきます
14
![Page 15: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/15.jpg)
CSVファイルを読み込む(復習)
dau <- ***
xという入れ物に数値や文字列、ベクトルや
関数、データなどを入れます
dau <- read.csv(“***.csv”)
dauにcsvファイルのデータを取り込みます
head(***)
***データの先頭数行を表示します
15
![Page 16: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/16.jpg)
移行した人かどうかデータの整理
unique(AA[ , c(“XX”, “YY”, “ZZ”))
ベクトルc( )の内容にダブりがある場合、そ
れらの重複を排除して1行にまとめる
mau <- unique (dau[, c(“region_month”,
“device”, “user_id”)])
※31日分のユーザデータの重複を排除し、整
理された「mau」というデータに加工する
16
![Page 17: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/17.jpg)
データの整理(2)
fp.mau <- unique (dau[dau$device=="FP",
c("region_month", "device", "user_id")])
・dauの「device」列が
”FP”のデータだけ
集める
(“SP”も同様に行う)
17
![Page 18: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/18.jpg)
1月と2月にデータを分ける
fp.mau1 <- fp.mau[fp.mau$region_month
== “2013-01”, ]
・前ページ踏まえればなんとなく分かる気
がする
このデータをFP・SP、1月・2月で計4
種類作成します
18
![Page 19: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/19.jpg)
1月と2月に分ける(2)
fp.mau1 <- fp.mau[fp.mau$region_month
== “2013-01”, ]
fp.mau2 <- fp.mau[fp.mau$region_month
== "2013-02", ]
sp.mau1 <- sp.mau[sp.mau$region_month
== "2013-01", ]
sp.mau2 <- sp.mau[sp.mau$region_month
== "2013-02", ]
19
![Page 20: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/20.jpg)
1月FP利用→2月にアクセスがあるか
mauの「is_access」列に「1」を挿入する
新「mau」に加工
20
![Page 21: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/21.jpg)
1月FP→翌月アクセスあるか(2)
fp.mau1 <- merge(fp.mau1,
mau[mau$region_month == “2013-02”,
c(“user_id”, “is_access”)], by = “user_id”, all.x =
T)
◎新「mau」のregion_monthが2013-02であ
るデータと、旧fp.mau1(ガラケー・1月ア
クセス)とをuser_idに紐付けてマージする
21
![Page 22: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/22.jpg)
1月FP→翌月アクセスあるか(3)
is_access=1の user_id→2月アクセスあり
is_accessが欠損値(N/A)→2月アクセスなし
22
![Page 23: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/23.jpg)
1月FP→翌月アクセスあるか(4)
fp.mau1$is_access[is.na(fp.mau1$is_access)
] <- 0
◎欠損値だと不都合があるので、新
「fp.mau1」のis_accessが空白(na)である
データに「0」を代入する
23
![Page 24: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/24.jpg)
1月携帯利用→2月携帯利用かどうか
fp.mau2$is_fp <- 1
fp.mau1 <- merge(fp.mau1, fp.mau2[,
c("user_id", "is_fp")], by = "user_id", all.x = T)
◎旧「fp.mau2(携帯・2月アクセスあり)」
データに「is_fp」列を加え、そこに1を代入
◎新「fp.mau1」と新「fp.mau2」を先程と同
様にマージさせる
◎その後、欠損値に「0」を代入(上では省略)
24
![Page 25: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/25.jpg)
1月携帯利用→2月SP利用かどうか
sp.mau2$is_sp <- 1
fp.mau1 <- merge(fp.mau1, sp.mau2[,
c(“user_id”, “is_sp”)], by = "user_id", all.x = T)
◎「sp.mau2(スマホ・2月アクセスあり)」
データに「is_sp」列を加え、そこに1を代入
◎新「fp.mau1」と新「sp.mau2」を先程と同
様にマージさせる
◎その後、欠損値に「0」を代入(上では省略)
25
![Page 26: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/26.jpg)
「1月携帯利用」データの加工状況
is_fp (携帯・2月アクセスあり)
is_sp(スマホ・2月アクセスあり)
26
![Page 27: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/27.jpg)
1月携帯利用→翌月ナシorSP利用
fp.mau1 <-
fp.mau1[fp.mau1$is_access == 0 |
fp.mau1$is_sp == 1, ]
◎2月アクセス=「なし」
◎“|”は「または(OR)」
◎スマホ・2月アクセス=「あり」
のみのデータに「fp.mau1」を再加工
27
![Page 28: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/28.jpg)
月次データの前処理が完了
1月携帯電話利用で2月は利用なし、ある
いはスマートフォン利用があったユーザ
28
![Page 29: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/29.jpg)
次に、日次アクセスデータを整える
fp.dau1 <- dau[dau$device == "FP" &
dau$region_month == "2013-01", ]
fp.dau1$is_access <- 1
◎”dau”の中で「1月携帯アクセスあり」
データを取り出し、その「is_access」に
“1”フラグを立てる
29
![Page 30: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/30.jpg)
日次アクセスデータを整える(2)
「fp.dau1」:”region_day”にアクセス日
データがYYYY-MM-DD形式で入っている
分析には使いづらいのでさらに加工
30
![Page 31: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/31.jpg)
dcast関数:復習(p.81)
dcast(AAA, XX ~ YY + ZZ, value.var=”CCC”,
length)
◎AAAデータから縦軸をXX、横軸をYY×ZZ
のクロス集計を算出
◎集計値は“CCC”の値
※reshape2の読み込みが必須です
31
![Page 32: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/32.jpg)
dcast関数(説明は省略)
dcast(data, formula, fun.aggregate=NULL, ..., margins=NULL, subset=NULL,
fill=NULL, drop=TRUE, value.var=guess_value(data))
◎data:melt() されたような形でカテゴリ変数を含む data.frame
◎formula:x_var ~ y_var ~ z_var ~ ... のような形で出力形式を指定
◎fun.aggregate=NULL:mean や sum など、整形後に同じマスに来る複数の
値に適用する関数。デフォルトでは length が働いて要素数が得られる。
◎...:aggregate関数への引数を渡せる
◎margins=NULL:列全体の平均や行全体の和などを追加するかどうか
◎subset=NULL:適用範囲を限定する e.g., subset=.(variable=="length")
◎fill=NULL
◎drop=TRUE
◎value.var=guess_value(data)
http://meme.biology.tohoku.ac.jp/students/iwasaki/rstats/reshape2.html
32
![Page 33: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/33.jpg)
日次アクセスデータを整える(3)
library(reshape2)
fp.dau1.cast <- dcast(fp.dau1, user_id ~
region_day, value.var = "is_access",
function(x) as.character(length(x)))
◎今回、function(x)以降は省略できそうです
33
![Page 34: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/34.jpg)
日次アクセスデータを整える(4)
「fp.dau1.cast」の整理が完了しました
34
![Page 35: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/35.jpg)
日次アクセスデータを整える(5)
names(fp.dau1.cast)[-1] <- paste0("X", 1:31,
"day")
◎”fp.dau1.cast”の1列目を除くラベル(項
目名)を、「X1day」から「X31day」に変
更します
◎「paste0」は文字列を結合する関数です
35
![Page 36: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/36.jpg)
日次データの前処理が完了
日次データ最終版
36
![Page 37: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/37.jpg)
最後に日次データと月次データの結合
fp.dau1.cast <- merge(fp.dau1.cast,
fp.mau1[, c(“user_id”, “is_sp”)], by =
"user_id")
◎”fp.dau1.cast”データと”fp.mau1”内の
「is_sp(2月スマホアクセスあり)」データ
とを、user_idに紐付けて結合します
37
![Page 38: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/38.jpg)
分析のための収集データ加工が完了
「 fp.dau1.cast」最終版(最右列に注目)
38
![Page 39: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/39.jpg)
table関数による要素の個数集計
table(fp.dau1.cast$is_sp)
◎”fp.dau1.cast”の「is_sp」には「0」が190
名分、「1」が62名分のデータが入ってい
ることが確認できます
39
0 1
190 62
![Page 40: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/40.jpg)
ここまで完了したことになります
現状と
あるべ
き姿
問題
発見
データ
収集と
加工
データ
分析
アク
ション
40
ギャップから問題の構造を把握
![Page 41: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/41.jpg)
ようやく前処理から分析へ
現状と
あるべ
き姿
問題
発見
データ
収集と
加工
データ
分析
アク
ション
41
ギャップから問題の構造を把握
![Page 42: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/42.jpg)
今回用いる分析
ロジスティック回帰分析(画像出典)
42
![Page 43: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/43.jpg)
こないだの回帰分析と何が違うの?
ロジスティック回帰分析
𝑦 =1
1+𝑒−( 𝑎𝑖𝑥𝑖+𝑏)に回帰
質的データに用いる
yのとる値はxがなんで
あっても0~1
任意のxに対するyが0か
1かの予測に利用できる
重回帰分析
𝑦 = 𝑎𝑖𝑥𝑖 + 𝑏に回帰
量的データに用いる
左記のような0~1の間に
yが入らないことも多々あ
るため、基本的に質的
データの予測には用いな
い
43
![Page 44: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/44.jpg)
ロジスティック回帰分析
ロジスティック回帰分析
𝑦 =1
1+𝑒−( 𝑎𝑖𝑥𝑖+𝑏)に回帰
質的データに用いる
yのとる値はxがなんで
あっても0~1
任意のxに対するyが0か
1かの予測に利用できる
重回帰分析
𝑦 = 𝑎𝑖𝑥𝑖 + 𝑏に回帰
量的データに用いる
左記のような0~1の間に
yが入らないことも多々あ
るため、基本的に質的
データの予測には用いな
い
44
![Page 45: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/45.jpg)
ロジスティック回帰分析(2)
任意のxに対するyが0か1かの予測に利用
できる
移行:y = 1 / 離脱:y = 0
今回作成したモデルにより、1月携帯ア
クセスのある各IDが、スマートフォンに
移行しているであろう確率を推定する
y > 0.5 なら移行IDと判定!
45
![Page 46: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/46.jpg)
ロジスティック回帰分析(3)
理論面を学習するには、「尤度(ゆう
ど)」などの概念を理解する必要があり
ます。
テキストはRの計算を利用できれば良いと
いう程度のスタンスなので、スライドで
も深入りはしません。
46
![Page 47: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/47.jpg)
分析用データをロジ回帰させる
fit.logit <- step(glm(is_sp ~ ., data =
fp.dau1.cast[, -1], family = binomial))
重回帰分析の考え方を思い出しながら、
以下の回帰を行う
47
説明変数(x) 被説明変数(y)
X1day~X31day is_sp
「ロジスティック回帰を行う」
![Page 48: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/48.jpg)
step()について
前ページの内容で、ロジスティック回帰自体
は glm( … , family = binominal ) で出来ている
step()を用いることで、 AIC(赤池情報量規
準)の値を利用して、説明変数が多すぎる問
題を緩和(変数選択)させながらロジス
ティック回帰分析を行える
テキストでもAICは名前くらいしか教えてい
ないので、ここでも説明しません
48
※AICの理解にも尤度の理解が必須です
![Page 49: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/49.jpg)
モデルの作成
summary(fit.logit)
分析結果のサマリーを表示
step()は以下のモデルを選びました
glm(formula = is_sp ~ X1day + X4day + X5day +
X7day + X10day + X13day + X22day + X29day +
X31day, family = binomial, data = fp.dau1.cast[, -
1])
説明変数にはX1day~X31dayすべてを用いるので
はなく、上記緑色部分を選択しました
49
※各回帰係数の推定量はサマリを参照
![Page 50: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/50.jpg)
作成したモデルによる予測
fp.dau1.cast$prob <- round(fitted(fit.logit), 2)
“fp.dau1.cast”に「prob」項目を作成し、
fit.logitの予測値(fitted)を返します
fp.dau1.cast$pred <- ifelse(fp.dau1.cast$prob
> 0.5, 1, 0)
“fp.dau1.cast”の「prob」項目が0.5を超える
IDの「pred」項目には1を返します(スマホ
移行(予測)と判定)
50
![Page 51: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/51.jpg)
予測結果の表示
head(fp.dau1.cast)
prob > 0.5 に「1」、それ以外に「0」が
振られているのを確認できます
51
![Page 52: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/52.jpg)
モデル予測の正解率
table(fp.dau1.cast[, c(“is_sp”, “pred”)])
モデル予測の正解率(青いとこ)
=(180+42) / (180+10+20+42)
= 0.8809524
より正確には(将来)予測ではなく、実測データのみからの
回帰なので、正解率が高いのは当たり前
52
実測\予測 移行 離脱
移行 180 10
離脱 20 42
![Page 53: 「ビジネス活用事例で学ぶ データサイエンス入門」輪読会#5資料](https://reader033.vdocuments.mx/reader033/viewer/2022051404/587123fb1a28abe4448b5b69/html5/thumbnails/53.jpg)
さいごに
テキストでは前ページでの高い正解率により、
「信頼のできるモデル構築ができた」
→なので「移行失敗の影響は小さい」
というロジックでの仮説検証を行っていますが、
序盤でも述べましたように、この分析ルーティ
ン自体は見なかったことにした方が良いのでは
と思います
53