Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データ分析手法をシミュレーションを通して理解する / stapy74

データ分析手法をシミュレーションを通して理解する / stapy74

2021年10月13日に行われた、みんなのPython勉強会での発表資料です。
https://startpython.connpass.com/event/224564/

森下光之助

October 13, 2021
Tweet

More Decks by 森下光之助

Other Decks in Programming

Transcript

  1. データ分析手法を
    シミュレーションを通して理解する
    2021/10/13
    みんなのPython勉強会 #74
    森下光之助(@dropout009)

    View Slide

  2. 自己紹介
    森下光之助
    TVISION INSIGHTS株式会社
    データサイエンティスト
    執行役員(データ・テクノロジー担当)
    テレビの視聴行動を分析しています
    データの利活用、マネジメント、組織づくり、
    因果推論、機械学習の解釈手法などに興味があ
    ります
    Twitter: @dropout009
    Speaker Deck: dropout009
    Blog: https://dropout009.hatenablog.com/

    View Slide

  3. 話したいこと

    View Slide

  4. データサイエンスって
    難しいですよね

    View Slide

  5. 教科書とか論文を読むと、
    数式、図、アルゴリズム、言葉…
    色んな方法で
    分析手法を説明してくれるけど

    View Slide

  6. 僕はよくわかりません

    View Slide

  7. 結局、
    自分で使ってみないと
    よくわからない

    View Slide

  8. なので、分析手法のふるまいを
    シミュレーションで確認するの、
    結構いいですよっていう話をします

    View Slide

  9. なんでシミュレーション?
    どんな設定だとうまくいって、
    どんな設定だとうまくいかないのか
    ふるまいを知りたければシミュレーションデータ!
    実データ
    • 実際のデータ(iris, titanic, …)
    • メリット
    • 現実にある
    • デメリット
    • 理論的な関係がわからないこ
    とが多い
    • 設定を細かく調整できない
    シミュレーションデータ
    • データを自分で作る
    • メリット
    • 理論的な関係がわかっている
    • 設定を細かく調整できる
    • デメリット
    • 現実的ではない/あまり意味の
    ない設定になる可能性がある

    View Slide

  10. やってみよう

    View Slide

  11. 分析手法例:Partial Dependence(PD)
    PD!
    𝑥"
    = 𝔼 &
    𝑓 𝑥"
    , 𝑿∖"
    = * &
    𝑓 𝑥"
    , 𝒙∖"
    𝑝 𝒙∖"
    𝑑𝒙∖"
    学習済みモデル !
    𝑓(𝑿)について、特徴量とモデルの予測値の関係を知り
    たい
    線形モデルなら良いが、ブラックボックスモデルは特徴量と予測値の
    関係が複雑なので、そのままだと解釈が難しい
    → いま興味のある特徴量𝑋!
    以外は周辺化で消してしまうことで、関係
    を単純化して解釈する

    View Slide

  12. データからPDを計算するアルゴリズム
    '
    PD!
    𝑥!
    =
    1
    𝑁
    .
    "#$
    %
    !
    𝑓(𝑥!
    , 𝒙",∖!
    )

    View Slide

  13. シミュレーション1:特徴量の相関するとどうなる?
    𝑌 = 𝑋(
    + 𝑋$
    ) + 𝜖
    𝑋(
    , 𝑋$
    ∼ Uniform 0, 1
    𝜖 ∼ 𝒩(0, 0.01))
    def generate_simulation_data(
    N: int = 10000,
    rho: float = 0.0,
    ) -> tuple[np.ndarray, np.ndarray]:
    """シミュレーションデータを生成する関数"""
    mu = np.array([0, 0])
    Sigma = np.array([[1, rho], [rho, 1]])
    X = np.random.multivariate_normal(mu, Sigma, N)
    for j in range(2):
    X[:, j] = sp.stats.norm().cdf(X[:, j])
    e = np.random.normal(0, 0.01, N)
    y = X[:, 0] + X[:, 1] ** 2 + e
    return X, y
    X, y = generate_simulation_data()
    相関していて一様分布に従うシ
    ミュレーションデータを作る小技
    多変量正規分布でデータを生成し
    て、それを正規分布のCDFで変換

    View Slide

  14. 予測モデルの構築とPDの計算
    # Random Forestで予測モデルを作成
    rf = RandomForestRegressor(
    n_jobs=-1,
    random_state=42
    ).fit(X, y)
    # PDを計算
    partial_dependence(
    estimator=rf,
    X=X,
    features=[j],
    kind="average”
    )
    scikit-learnのinspectionモジュールに
    partial_dependence()関数がある
    ちなみに、
    permutation_importance()という
    変数重要度を計算する関数もある
    kind=“individual”を指定すると、ICEが計
    算できる(後述)
    ちなみに、“both”を指定すると両方計算
    される

    View Slide

  15. シミュレーション1-1:相関係数 = 0
    PDは理論的な関係をうまく復元できている モデルは
    Random Forest

    View Slide

  16. シミュレーション1-2:相関係数 = 0.95
    PDは理論的な関係とズレが生じている モデルは
    Random Forest

    View Slide

  17. PDの理論的なふるまい
    !
    𝑓 𝑋(
    , 𝑋$
    = 𝑋(
    + 𝑋$
    )のように、
    モデルが理論的な関係を完全に学習できていたとすると、
    PDは以下のようになるはず。。。が、実際はうまくいっていない
    なんで?
    PD!
    𝑥!
    = 𝔼 &
    𝑓 𝑥!
    , 𝑋"
    = 𝔼 𝑥!
    + 𝑋"
    # = "
    $
    + 𝑥!
    PD"
    𝑥"
    = 𝔼[ &
    𝑓 𝑋!
    , 𝑥"
    ] = 𝔼 𝑋!
    + 𝑥"
    # = "
    #
    + 𝑥"
    #

    View Slide

  18. なんでPDがうまくいかないのか? → 外挿がうまくいっていない

    View Slide

  19. 対応:Accumulated Local Effects(ALE)
    外挿が問題なので、
    データのあるところだけで
    予測しよう
    参考:Accumulated Local Effects(ALE)で機械学習モデルを解釈する
    https://dropout009.hatenablog.com/entry/2021/08/08/121858

    View Slide

  20. シミュレーション2:交互作用があるとどうなる?
    𝑌 = 𝑋(
    − 5𝑋$
    + 10𝑋$
    𝑋)
    + 𝜖
    𝑋(
    , 𝑋$
    ∼ Uniform −1, 1
    𝑋)
    ∼ Bernoulli 0.5
    𝜖 ∼ 𝒩(0, 0.01)
    def generate_simulation_data(
    N: int = 10000
    ) -> tuple[np.ndarray, np.ndarray]:
    """シミュレーションデータを生成する関数"""
    x0 = np.random.uniform(-1, 1, N)
    x1 = np.random.uniform(-1, 1, N)
    x2 = np.random.binomial(1, 0.5, N)
    e = np.random.normal(0, 0.1, N)
    X = np.column_stack((x0, x1, x2))
    y = x0 - 5 * x1 + 10 * x1 * x2 + e
    return X, y
    X, y = generate_simulation_data()

    View Slide

  21. PDは交互作用をうまく捉えられていない
    モデルは
    Random Forest

    View Slide

  22. PDが交互作用を捉えられない原因
    つまり、学習がうまくいっていても、交互作用が存在する場合、
    PDはうまく特徴量とモデルの予測値の関係を捉えられない
    PD"
    𝑥"
    = 𝔼 &
    𝑓 𝑋!
    , 𝑥"
    , 𝑋#
    = 𝔼 𝑋!
    − 5𝑥"
    + 10𝑥"
    𝑋#
    = 0
    !
    𝑓 𝑋(
    , 𝑋$
    , 𝑋)
    = 𝑋(
    − 5𝑋$
    + 10𝑋$
    𝑋)
    のように、
    モデルが理論的な関係を完全に学習できていたとしても、
    Partial Dependenceは以下のようになるはず

    View Slide

  23. 対応:Individual Conditional Expectation(ICE)
    平均を取ると相殺しちゃう
    ので、インスタンスごとに
    特徴量とモデルの予測値の
    関係を見てみよう
    参考:tidymodelsとDALEXによるtidyで解釈可能な機械学習
    https://dropout009.hatenablog.com/entry/2019/11/17/112655

    View Slide

  24. まとめ

    View Slide

  25. まとめ
    • データサイエンスってほんと難しいですよね
    • シミュレーションでいろいろ試行錯誤することで、分析手法のふるまいを
    確認し、理解を深めることができる
    • シミュレーションは細かく設定を変更できるので、どんなときに手法がう
    まくいって、どんなときにうまくいかないのかを調べるのに適している
    • 新しいことを勉強して、いろいろ試すのは素直に楽しい

    View Slide

  26. 参考文献
    • Friedman, Jerome H. "Greedy function approximation: a gradient
    boosting machine." Annals of statistics (2001): 1189-1232.
    • Goldstein, Alex, et al. "Peeking inside the black box: Visualizing
    statistical learning with plots of individual conditional
    expectation." Journal of Computational and Graphical Statistics 24.1
    (2015): 44-65.
    • Hooker, Giles, and Lucas Mentch. "Please Stop Permuting Features: An
    Explanation and Alternatives." arXiv preprint arXiv:1905.03151 (2019).
    • Apley, Daniel W., and Jingyu Zhu. "Visualizing the effects of predictor
    variables in black box supervised learning models." Journal of the Royal
    Statistical Society: Series B (Statistical Methodology) 82.4 (2020):
    1059-1086.
    • Molnar, Christoph. "Interpretable machine learning. A Guide for Making
    Black Box Models Explainable." (2019).
    https://christophm.github.io/interpretable-ml-book/.
    • 森下光之助. 「機械学習を解釈する技術〜予測力と説明力を両立する実践テ
    クニック」. 技術評論社. (2021).
    (宣伝)
    https://is.gd/nkYPPG

    View Slide

  27. Pythonが使えるエンジニア・データサイエンティスト大募集

    View Slide