
統計解析の勉強をしていく中で、どうやったら実際の業務の中に活かしていけるかを模索していて、この本にいきあたりました。人々が生み出すデータがますます増加していく中で、そのデータをビジネスにどう活用していくかをエンジニアの視点で考えられる素晴らしい本だと思います。
今回はこの本の中で特に参考になった点を中心にピックアップしていきます。
データサイエンティストの仕事術
Cross Industry Standard Process for Data Mining(CRISP-DM)
データマイニングプロジェクトにおける標準的な6つの手順。
1) Business Understanging
ビジネスの全体像の理解(ヒアリング)と課題設定
2) Data Understanding
データ収集と理解に努めて、仮説構築の下地を作る
3) Data Preparation
数理モデルの作成のために、データマート(データウェアハウス)を構築。
欠損値や外れ値を除去していく。
4) Modeling
仮説にもどついて、数理モデルを構築する
5) Evaluation
数理モデルの評価。ビジネスリスクの評価
6) Deployment
数理モデルに基づく、ビジネス施策の実施
必要なスキルセット
# ハードスキル
1) Data Understanding 〜 Data Preparation
RDBMS(SQL)、Hadoop(HDFS)、MapReduce、Hiveなど
2) Modeling 〜 Devaluation
統計解析、機械学習の知識、R, Pythonなど
# ソフトスキル
1) Business Understanding 〜 Data Understanding
ビジネスにおける業界、業務の知識。質問力、理解力が必要
2) Deployment
分析結果の伝達力、説得力、プロジェクトの推進力が必要
根本としては好奇心。「問題を核心まで掘り下げて、そこで見つけた疑問を明確で検証可能な一連の仮説に落としこみたいという欲求」が必要。
データサイエンスよりも大切なこと
1) 統計的な正しさよりもビジネスの成功
2) 組織の構造や実務の改善効果を重視する
3) 意味のある分析のためには泥臭いクリーニングが必須
4) データは適切な保持が大切
データマイニングには検定がない
# 統計学における検定(パラメトリック)
対象となる母集団に正規分布を仮定して、結果が母集団の代表としてみなせるかを判断する
# データマイニングにおける検証(ノンパラメトリック)
母集団から学習データと検証データを作成、モデルの妥当性・有効性を検証する
大切なことは、「正しい答え」を見つけることではなく、「正しい問い」を見つけること。
データ分析実践入門
事前準備: RStudio
この章では主にRを使います。RStudioについては次の章で説明します。
ロジスティック回帰
Rにデフォルトで入っている、タイタニック号の乗客の生存情報(Titanic)にロジスティック回帰モデルを使う。乗客の各属性から、生存の要因を探す。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| ## データ整形
z <- data.frame(Titanic)
titanic.data <- data.frame(
Class=rep(z$Class, z$Freq),
Sex=rep(z$Sex, z$Freq),
Age=rep(z$Age, z$Freq),
Survived=rep(z$Survived, z$Freq)
)
head(titanic.data)
# Class Sex Age Survived
# 1 3rd Male Child No
# 2 3rd Male Child No
# 3 3rd Male Child No
# 4 3rd Male Child No
# 5 3rd Male Child No
# 6 3rd Male Child No
## モデル構築
titanic.logit <- glm(Survived~., data=titanic.data, family=binomial)
summary(titanic.logit)
# Call:
# glm(formula = Survived ~ ., family = binomial, data = titanic.data)
#
# Deviance Residuals:
# Min 1Q Median 3Q Max
# -2.0812 -0.7149 -0.6656 0.6858 2.1278
#
# Coefficients:
# Estimate Std. Error z value Pr(>|z|)
# (Intercept) 0.6853 0.2730 2.510 0.0121 *
# Class2nd -1.0181 0.1960 -5.194 2.05e-07 ***
# Class3rd -1.7778 0.1716 -10.362 < 2e-16 ***
# ClassCrew -0.8577 0.1573 -5.451 5.00e-08 ***
# SexFemale 2.4201 0.1404 17.236 < 2e-16 ***
# AgeAdult -1.0615 0.2440 -4.350 1.36e-05 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# (Dispersion parameter for binomial family taken to be 1)
#
# Null deviance: 2769.5 on 2200 degrees of freedom
# Residual deviance: 2210.1 on 2195 degrees of freedom
# AIC: 2222.1
#
# Number of Fisher Scoring iterations: 4
|
オッズ比の計算
1
2
3
4
5
6
7
8
9
10
| install.packages('epicalc')
library('epicalc')
logistic.display(titanic.logit, simplified=T)
# OR lower95ci upper95ci Pr(>|Z|)
# Class2nd 0.3612825 0.2460447 0.5304933 2.053331e-07
# Class3rd 0.1690159 0.1207510 0.2365727 3.691891e-25
# ClassCrew 0.4241466 0.3115940 0.5773549 5.004592e-08
# SexFemale 11.2465380 8.5408719 14.8093331 1.431830e-66
# AgeAdult 0.3459219 0.2144193 0.5580746 1.360490e-05
#=> 例えば、女性のほうが11.2465380倍生存確率が高いということがわかる
|
決定木モデル
1
2
3
4
5
6
| library(rpart)
install.packages('partykit')
library(partykit)
titanic.rp <- rpart(Survived~., data=titanic.data)
plot(as.party(titanic.rp), tp_args=T)
|

主成分分析
1
2
| state.pca <- prcomp(state.x77[,1:6], scale=T)
biplot(state.pca)
|

非階層クラスタリング: k-means
k-meansの手順。
1) k個のクラスタの中心の初期値を決める
2) 各データをk個クラスタ中心との距離を求め、最も近いクラスタに分類
3) 形成されたクラスタの中心を求める
4) クラスタの中心が変化しない時点まで(2), (3)を繰り返す
サンプルソースはこちら。
1
2
3
4
5
6
7
8
9
10
| # k-meansの実行(クラスタ数を3つに設定)
state.km <- kmeans(scale(state.x77[,1:6]),3)
# 主成分分析の結果にクラスタ情報を付与
state.pca.df <- data.frame(state.pca$x)
state.pca.df$name <- rownames(state.pca.df)
state.pca.df$cluster <- as.factor(state.km$cluster)
# 描画
ggplot(state.pca.df, aes(x=PC1, y=PC2, label=name, col=cluster)) + geom_text() + theme_bw(16)
|

レーダーチャート
1
2
3
4
5
6
7
8
9
10
11
12
13
| install.packages('fmsb')
library('fmsb')
df <- as.data.frame(scale(state.km$centers))
dfmax <- apply(df, 2, max) + 1
dfmin <- apply(df, 2, min) - 1
df <- rbind(dfmax, dfmin, df)
# 描画
radarchart(df, seg=5, plty=1, pcol=rainbow(3))
legend("topright", legend=1:3, col=rainbow(3), lty=1)
# クラスタ1 => 平均寿命、高卒率、収入が多い
# クラスタ2 => 殺人件数と非識字率が高い
# クラスタ3 => 人口が多い
|

RStudioのすすめ
以下オススメリンク。
デスクトップアプリ R用のIDE: RStudio
RのIDEツール。主な機能、使い方は次の通り。
1) RStudioのコード補完や、関数へのジャンプ、組み込み関数のソース閲覧機能
2) Apacheとの連携によるレポート表示、Emailでのレポート配信
3) Gitによるソースコード管理のサポート機能
knitr
RStudio上でReproducible Researchを実現するためのパッケージ。Markdown, Rファイル => HTMLへの変換を行う事ができる。また、後述のRPubsへのアップロード機能も備える。
RPubs
RStudio.comが提供するサービス。再現可能な研究(Reproducible Research)を実現するために、Rの実行手順などをWebでシェアできるサービス。
RStudio Server
RStudioのWebアプリケーション版。
Pythonによる機械学習
Pythonで使えるデータ分析に有効なライブラリ群についての紹介。
Python環境の準備
もしMachのPython環境を作る場合は、拙著[Python開発環境構築 徹底解説pyenv, macがオススメです。
引き続き学習中!