読者です 読者をやめる 読者になる 読者になる

データサイエンティスト養成読本

データサイエンティスト養成読本

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)

p.94 まで

第4章 Python による機械学習

  • データを分析するときに必ず機械学習が必要とは限らない
  • 機械学習によってある入力値(説明変数)に対して、結果の値(目的変数)を得ることができ また入力値がどれくらい結果に影響を及ぼすかを知ることができる
  • Numpy
  • Scipy
    • 数学、科学、工学のための数値解析
  • Matplotlib
    • データを可視化し理解を助けるグラフ描画ライブラリ
  • scikit-learn
  • pandas
    • データ構造やデータ解析ツールを利用するときに便利でハイパフォーマンスなライブラリ
  • rpy2
    • R言語を呼び出すライブラリ
    • AGPL v3.0 商用利用に注意
  • IPython
    • 対話的に実行出来るシェル

rpy2 のインストールができなかった

第5章 データマイニングに必要な10のアルゴリズム

  • C4.5
  • k-means アルゴリズム
  • サポートベクターマシンSVM
    • 機械学習の分野でもっとも代表的な手法
    • もともと手書き文字の画像を機械に認識させるためのアルゴリズム
    • サンプル数が大きくなると計算時間が急に増加
    • 比較的少ないサンプルで説明変数が多い場合に適した手法
    • 連続値の予測に当てはまる SVM を Support Vector Regression(SVR)
    • 時間がかかる問題にたいしては core-vector machine という手法が提案されている
  • アプリオリアルゴリズム
    • 大量のトランザクションデータの中から価値のある繋がりを見つける(アソシエーション分析)ために最もよく使われる手法
    • 強力な結果が得られるうえに他の手法に比べて実装が難しくない
    • FP-growth アルゴリズムの存在が大きく影響
      • データベースを全ての重要な情報をもつ FP-tree という木構造に圧縮する
      • 圧縮されたデータベースを高頻度セットに関連する条件付きデータベースに分割し、マイニングする
  • EM アルゴリズム
    • 期待値最大化法(Expectation-maximization algorithm)とも呼ばれる
    • 様々な確率モデルでパラメータを推定する際に使われるアルゴリズム
    • 計算方法
      • パラメタ-の初期値を決める
      • Expectation ステップ:未観測データの期待値を求める
      • Maximization ステップ:未観測データを動かして、目的関数を最大にするパラメータを求める
      • 収束するまで Expectation ステップ、Maximization ステップを繰り返す
  • ページランク
  • アダブースト
    • アンサンブル学習の一つで、ブースティングと呼ばれる手法のアルゴリズム
    • アダブーストは過学習(オーバーフィッティング)しにくい
    • 実際に得られる変数の次元が大きいことがよくある
      • 次元縮約
      • 変数選択(特徴選択)
    • 勾配ブースティングモデル(Gradient Boosting Model)
      • 近年のアンサンブル学習の中で最も性能が高い手法
      • gbm パッケージ
  • k - 近傍分類
    • すべての訓練データを記憶してクラスタリングを行う「まる暗記」型の分類器
    • 精度を落とさないまま訓練データを減らす方法(condensing)
    • 訓練データは減らすが精度が高くなる方法(editing)
    • 近接グラフへの応用
    • ファジーアプローチ
  • ナイーブベイズ
    • クラスを予測するための手法
    • 構築が簡単で、パラメータを推測するための複雑な繰り返し計算が必要無い
      • 大きなデータに対しても適用できる
  • CART
    • Classification and Regression Trees
    • 2分岐び決定木によってクラス、連続値、生存時間などを予測できる手法

特集2 マーケティング分析本格入門

第1章 R によるマーケティング分析

  • ポジショニングを決める
    • 市場はどのような人で構成されていて : セグメンテーション
    • その中の誰をターゲットにし : ターゲッティング
    • どんなサービスや商品を提供するのか : ポジショニング
  • セグメンテーション
    • 基本的な属性データによる区分ではビジネスにおいて意味のあるグループ分けができない
# 主成分分析の実行
sp.user.data <- read.csv("sp_user_research_data.csv", header = T)
sp.user.pca <- prcomp(sp.user.data[, -1], scale = T)
biplot(sp.user.pca)

# k-means によるクラスリングの実行
sp.user.km <- kmeans(sp.user.data[, -1], 4)

sp.user.pca.df <- data.frame(sp.user.pca$x)
sp.user.pca.df$id <- sp.user.data$if
sp.user.pca.df$cluster <- as.factor(sp.user.km$cluster)

ggplot(sp.user.pca.df, aes(x = PC1, y = PC2, label = id, col = cluster)) +
  geom_text() +
  theme_bw(16)

# レーダーチャートの作成
library(fmsb)

df <- data.frame(scale(sp.user.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(4))
legend("topright", legend = 1:4, col = rainbow(4), lty = 1)

f:id:yossk:20150429230107j:plain f:id:yossk:20150429230115j:plain f:id:yossk:20150429230125j:plain

  • ポジショニング
    • MDS で知的マップを作成
    • 近くマップに選考ベクトルを描画
# MDS による近くマップの作成
install.packages(MASS)
library(MASS)

target.data <- read.csv("target_preference_data.csv", header = T)

service.dist <- dist(t(target.data[, -1]))
service.map <- isoMDS(service.dist)

service.map.df <- data.frame(scale(service.map$points))
service.map.df$service_name <- names(target.data[, -1])

ggplot(service.map.df, aes(x = X1, y = X2, label = service_name)) +
  geom_text() +
  theme_bw(16)

# 選考ベクトルの推定
library(ggplot2)

user.preference.data <-
  do.call(rbind,
    lapply(1:nrow(target.data),
      function(i) {
        preference.data <- data.frame(
          p = as.numeric(target.data[i, -1]),
          X1 = service.map.df$X1,
          X2 = service.map.df$X2
        )
        fit <- lm(p ~ ., data = preference.data)
        b <- 2 / sqrt(fit$coef["X1"] ^ 2 + fit$coef["X2"] ^ 2)
        data.frame(
          X1 = b * fit$coef["X1"],
          X2 = b * fit$coef["X2"],
          service_name = i
        )
      }
    )
  )

ggplot(service.map.df, aes(x = X1, y = X2, label = service_name)) +
  geom_text() +
  theme_bw(16) +
  xlim(-2, 2) +
  ylim(-2, 2) +
  geom_point(data = user.preference.data, aes(x = X1, y = X2))

f:id:yossk:20150429230134j:plain f:id:yossk:20150429230144j:plain