集計/分析/機械学習の流れ

流れ

最近pandasやnumpy, sklearnに力入れてたので、それが必要な流れをなにも見ずに書いてみた

書いてみて思ったこと

  • コンペのようなデータセットが用意されている場合と、自分たちのサービス改善のためだとだいぶ違う
  • あとで分解したほうがよさそう

詳細

  1. 目的決定
    1. なにを解決したいのか
      1. 定点観測のため(KGIからのKPI)
      2. 定点観測からの深掘りのための分析(今回の目的)
      3. レコメンドなどのシステムでも利用(今回の目的とは違う?)
  2. データ用意
    1. 集計
      1. どんなデータか/もしくは必要か
        1. マスタ/トランザクション
        2. 差分/Dump
      2. データの提供タイミング
      3. 自動化してためこめるか
      4. どのデータと関連がある(結合できる)
      5. データ量はストレージに対して問題ないか
        1. 集約するかどうか
    2. 分析
      1. 変数の作成の計画
  3. データ把握
    1. 尺度の把握(参考書たくさんある)
      1. 連続
        1. 0基準等の比例(よく使う
        2. 間隔(あんまり使ってない
      2. その他
        1. 順序/カテゴリ(二値含む
    2. 単変数
      1. 連続
        1. ヒストグラム(分布確認
        2. 箱ひげ図(外れ値ざっくり確認)
        3. 要約統計量(箱ひげ図で見れない平均をみる/四分位数/min,max,std)
        4. NAの数
      2. その他
        1. カテゴリ種類
        2. 種類別カウント
          1. 棒グラフ
        3. 上記の構成比率
          1. 100%積み上げ棒グラフなど
    3. 2変数
      1. 連続
        1. 散布図行列(重くなければ一気に見てしまう
        2. 相関係数/相関係数行列ヒートマップ
      2. その他
        1. カテゴリ×目的変数の箱ひげ図
      3. 目的変数がある場合
        1. 目的変数がカテゴリなら
          1. 連続とのカテゴリ別ヒストグラム(別々,積み上げ)
        2. 目的変数が連続なら
          1. カテゴリとのカテゴリ別箱ひげ図
    4. 多変数
      1. 散布図の目的カテゴリ別に色分け
      2. クロス集計
        1. 行/列それぞれの総数での集計
        2. 各セルの全体における構成比率
        3. 行/列単位の構成比率
        4. 行列のオッズ/オッズ比
        5. カイ二乗検定
      3. クロスグラフ
        1. 集計ではなくクロスしたセルにヒストグラムなど
  4. 前処理
    1. 外れ値除外
    2. 欠損値除外or埋め
    3. ダミー変数(kカテゴリ -1個)
    4. 縦持ち横持ち変換(縦のUnique化 and 説明変数の分解/ダミー変数に似ている)
    5. 文字列変数の規則
      1. titanicの名前の例
    6. ドメイン知識からひねり出す
      1. 前処理につながる
    7. 離散化(segmentation ?)
      1. 連続量身長を大中小の順序に変換,解釈しやすくなることもある
      2. デシル分析など
    8. 日付の分解/集約
      1. 日時
        1. 時間帯別(0~23,AM/PM,朝昼晩夜)
        2. 年月日分解
      2. ある基準からの経過時間
        1. 初回利用日-会員登録日など(N日後利用)
        2. 集計最終日-直近の利用日(N日前利用)
          1. RFMのRecency
      3. 利用日のUniqueカウント(利用日数)
        1. 連続量以外でもRFMのFrequncyにする
    9. 正規化(標準化,MinMaxScale,etc.)
    10. 多重共線性/分散の少なすぎる説明変数の選定と削除
    11. その他データセットとの結合
      1. SQLでは複雑になる場合
      2. DBに格納されていないファイル,異なるDBのデータ
    12. 時系列系処理
      1. 移動平均,自己相関など(あんまり知らない
    13. などなど
    14. 再度データ把握
  5. モデル選定
    1. ここ分布やドメインによっていろいろ変える
  6. 学習
    1. 過学習/汎化能力のためのデータ準備
      1. Cross Validation
    2. 説明変数用
    3. ハイパーパラメータ用
  7. 検証
    1. 係数の重要度
      1. 施策に活かせるかつコントロールできる変数を探す
      2. 回帰係数
      3. 決定木系
    2. いろんな評価指標
      1. 回帰
        1. RMSE
      2. 分類
        1. confusion matrixからのnegative/positive/True/Falseによる指標
  8. 繰り返し
  • この流れさえ見失わなければ、大枠ははずさないはず
  • この流れに合うAPIを探す
    • 評価系が甘い
    • 教師なし評価についてまだわかっていない
    • NN系はわからない
    • 画像/テキスト系もわからない

分析のための考え方

  • 目標設定
  • volume と 割合
    • ex. 割合(効果)が高くても、volumeがなければ売上にならない
    • 構成比率
    • 正規化/標準化
  • diff/推移
    • 時系列
  • 今回集計したものと、前回集計したものを比較
    • これも定期的に等間隔で行いデータを増やせば、集計結果を時系列として比較できる

分析/機械学習のための知識

  • math
    • 微分積分
    • 線形代数
    • 確率
    • 組合せ
    • 数学かわからないけど、いろいろな距離
  • english
    • わからなかったらGoogle Translate
  • programming
    • if,for,iteratorなどの基本
    • DataFrameと行列ライブラリ慣れ