TECH BLOG
クロス・マーケティンググループ
クロス・マーケティンググループ

PyCaretを用いた予測モデルによる要因分析

Cover Image for PyCaretを用いた予測モデルによる要因分析
目次

    PyCaretを用いた予測モデルによる要因分析

    項目内容
    この記事でわかることデータ分析業務で最も使用頻度の高いスキル「予測モデルによる要因分析」を最短で身につけることができる。
    本シリーズの対象者・コンピュータサイエンス、数学などの素養があるかた。
    ・ご自身のデータサイエンス・スキルをグロースハックに応用したいかた。
    本シリーズで提供する知識・グロースハックに役立つデータサイエンス手法を体系的に学ぶことができる。
    ・各記事で紹介するpythonコードを短時間で実務に利用できる。
    次回以降に予定している内容1. AutoMLの使いかた
    2. 実践的なデータ分析手法の紹介
    3. グロースハック手法の紹介
    4. 業務に役立つ統計知識・機械学習の知識の紹介

    1.最短で身につけるデータ分析

     本シリーズでは、グロースハックに役立つデータサイエンス手法を紹介しています。第1回で記載したように、グロースハックのプロセスは、データ分析・洞察、アイディアの生成、優先順位決め、実験を繰り返すサイクルです。

     今回は、プロダクトを成長させる上で核となるデータ分析の方法を早速紹介させていただきます。業務の中でデータを活用して問題を解決したいかたには、ぜひご一読いただきたい内容です。筆者の経験上、データ分析業務で最も使用頻度の高いスキル「予測モデルによる要因分析」を最短で身につけることができます。

    グロースハックサイクル

    2.予測モデルによる要因分析

    2.1.予測モデルによる要因分析とは

     データ分析とは、本質的にはデータにしゃべらせることです。経済学者ヴィルフレド・パレートが発見したパレートの法則(80:20の法則)では、経済において、全体の数値の大部分は、全体を構成するうちの一部の要素が生み出しているとしています。売上の成長は、約2割の要因が決めており、その約2割の要因にフォーカスすることがグロースハックでは求められます。

     現在では、統計学の深い知識、高度なプログラミングスキルがなくても効率的にデータ分析を行うことができます。筆者の好きなツールExploratoryは、データサイエンスの民主化をコンセプトとして掲げており、GUI上で効率的にデータ探索を行うことが可能です。

     AutoML(自動機械学習)の一種であるDataRobotは、データプレパレーション、モデリング、モデルデプロイ、予測実行までのデータサイエンスプロセスをトータルで自動化します。これらのツールは、成長の決め手となる宝をデータの中から掘り当てるために使うことができます。今回は、機械学習のワークフローを自動化するPython製のオープンソース、ローコードの機械学習ライブラリであるPyCaretを用いることにします。

    2.2.データ分析手法の概要

     Scikit-Learnは、予測データ解析のためのシンプルで効率的なツールです。多くの場合、データサイエンティストに期待されることは、適切なデータ分析手法を提案することです。Scikit-Learnの公式サイトには、その際におおよその目安になるフローチャートが公開されています。

    scikit-learn algorithm cheat-sheet

     このフローチャートから、どのような手法があるのか外観することができます。Scikit-Learnの提供する手法は、大きく分けて分類、回帰、クラスタリング、次元圧縮の領域に分類されています。

     例えば、勤務先の業務で売上の要因分析をすることになった場合、下記のように手法を選択します。

    1. フローチャートのSTARTから開始
    2. データ数は50行より大きいかどうか? → YESに進む
    3. カテゴリーの予測かどうか? → 売上は数値として扱うためYESに進む
    4. 量的変数の予測かどうか? → 売上のデータがあるならばYESに進む
    5. データは10万レコードより小さいかどうか → 10万レコードより少ないためYESに進む
    6. 少ない特徴量を重視するかどうか? → 影響の強い要因を知りたいのでYES

     後述のPyCaretを使用すると、この図に記載されている予測モデルを簡単に実装することができます。

    3.PyCaretで予測モデルを最速で作る

    3.1.PyCaretとは

     PyCaretを使用した「予測モデルによる要因分析(predictive data analysis)」の具体的な方法について解説します。caretとはClassification And Regression Trainingを意味しており、分類、回帰問題を効率的に実装することのできるR言語のcaretパッケージに由来します。

     PyCaretの最大の特徴は、scikit-learn, XGBoost, LightGBM, CatBoost, Optuna, Hyperopt, Rayなどの機械学習ライブラリをベースに作られていることです。PyCaretの特徴は下記の通りです。

    • コーディングに費やす時間を減らし、分析に多くの時間を費やすことができる
    • 誰でも少ないコードで強力なエンドツーエンドの機械学習ソリューションを構築できる
    • モデルの学習、分析、評価のサイクルを高速に繰り返すことができる
    • 構築したモデルは、REST API、MLアプリなどとしてデプロイすることができる

    3.2.インストール

     Pycaret の動作環境は下記の通りです(2023年3月時点)。

    • Python 3.7, 3.8, 3.9, 3.10
    • Ubuntu 16.04 以降
    • Windows 7以降
    • 64ビットシステム

     PyCaretのインストールや動作確認でエラーが出る場合、既存のライブラリと競合が発生している可能性があります。競合を避けるために、Pycaret専用の仮想環境を作ることをお勧めします。ターミナルウィンドウ(Windows の場合は、Anaconda Prompt)で下記を実行します。

    # Anacondaでの仮想環境の作成
    conda create --name pycaret_test python=3.10 jupyter
    # 仮想環境のアクティベート
    conda activate pycaret_test
    # PyCaretのライブラリをインストール
    pip install pycaret
    # 作成した仮想環境をJupyter Notebookのカーネルに追加
    python -m ipykernel install --user --name pycaret_test --display-name "pycaret_test"
    # PythonShellの起動
    python
    

     PythonShellでの動作確認

    from pycaret.regression import *
    

    MacOSの場合、ここで、下記のようなエラーが発生する場合があります。

    Library not loaded: '/usr/local/opt/libomp/lib/libomp.dylib'

    LightGBMで使用するlibompがインストールされていないことが原因です。ターミナルでlibompをインストールします。MacOSではbrewを使用してインストールできます。

     brew install libomp
    

    ### 3.3.回帰モデルの構築

    早速、回帰モデルを構築します。Jupyter Notebook を起動します。ノートブックを新規作成するときに、pycaret_testをカーネルとして選択します。以下のコードは、ノートブック上で実行します。

    # ライブラリの読み込み
    from pycaret.datasets import get_data
    from pycaret.regression import *
    # Boston Housingデータセットのロード
    data = get_data('boston')
    

    オリジナルのデータを使用したい場合は、pandasを使用して、csvファイルを読み込んでください。

    # ライブラリの読み込み
    import pandas as pd
    # オリジナルデータセットのロード
    data = pd.read_csv('mydata.csv')
    

    Boston Housingデータセットは、回帰モデルの構築に使えるデータです。1戸当たりの平均部屋数(rm)、低所得者人口の割合(lstat)など13種類の変数を使用して、住宅価格の中央値(medv)を予測します。

    Boston Housing dataset

    Setup関数は、トレーニング環境を初期化し、変換パイプラインを作成する前処理を実行します。他の関数を実行する前に呼び出す必要があります。data, targetは必須のパラメータです。

    targetでは、目的変数をmedvに指定します。session_idは、毎回同じ予測結果を得るために指定する乱数のシードで、任意の数値を指定します。乱数のシードは、ランダムな初期値を用いるモデルを初期化する際の乱数(random_state)として使用されます。

    # セットアップ(前処理)の実行
    s = setup(data, target = "medv", session_id = 123)
    

    学習に使ってはいけない説明変数(リーケージ)が含まれていると誤った予測結果が得られます。例えば、データのID、日付、本来予測時に得られない変数、予測したい値そのものなどは除外する必要があります。下記に例を示します。

    # 説明変数を除外する例
    s = setup(data, target = "medv", ignore_features = ["nox"], session_id = 123)
    

    変数の型は自動的に推定されますが、指定することも可能です。数値は numeric_features、カテゴリは categorical_features を使用してリストで変数名を指定します。下記に例を示します。

    # 説明変数の型を指定する例
    s = setup(data, target = "medv", numeric_features = ["nox", "age"],
    categorical_features = ["chas"], session_id = 123)
    

    Boston Housingデータセットの場合、変数の型の指定、変数の除外は不要なので、シンプルに、データ、目的変数、session_idのみ指定してsetup関数を実行します。

    # セットアップ(前処理)の実行
    s = setup(data, target = "medv", session_id = 123)
    

    setupが正しく実行されると、下記のようにどのような前処理が行われたか表示されます。

    setup result

    デフォルトでは、下記の前処理が実行されます。

    • 数値の欠損値処理(Numeric imputation)
    • カテゴリ変数の欠損値処理(Categorical imputation)
    • 訓練・テストデータ分割(Transformed train/test set shape)
    • カテゴリ変数が存在する場合、One-Hot Encodingで数値化

    前処理が適用されたデータを取得することもできます。get_config関数に、X_trainを指定すると学習データ、X_testを指定するとテストデータを取得できます。

    # 学習データの取得
    get_config("X_train")
    

    ![get_config("X_train")](//images.ctfassets.net/j019eeqyi3bh/YNqXH0lrk9MecOyRHc0DQ/fee40b3704285954d4f5a7980fcdb520/___3.png)

    compare_models関数は,PyCaretで利用可能なすべてのモデルを10 Folds クロスバリデーションにより構築し、平均スコアを表示します。どのモデルが一番精度がよいのかを代表的な精度指標で確認することができます。

    Boston Housingデータセットの場合、Extra Trees Regressorがモデルとして一番性能がよさそうです。例えば、回帰モデルの評価指標としてよく使われる寄与率(R2)は、0.8884 ということがわかります。

    # モデル構築
    best = compare_models()
    

    compare_models

    bestには、ベストモデル(Extra Trees Regressor)のハイパーパラメータのデフォルト値が含まれています。Extra Trees Regressorを実装する際は、同じパラメータを指定すれば、同じモデルを再現することができます。

    print(best)
    

    ExtraTreesRegressor(n_jobs=-1, random_state=123)

    いよいよ、本題の「予測モデルによる要因分析(predictive data analysis)」を実行します。evaluate_model関数は、指定したモデルの性能を分析するインタフェースを提供します。evaluate_model関数は、ipywidget を使っているため、Notebook でのみ使用可能です。

    # モデルの分析
    evaluate_model(best)
    

    Feature Importanceを選択します。モデルによっては、Feature Importanceやその他のプロットが表示できない場合もあります。Extra Trees Regressorなどの決定木ベースの手法では、Variable Importanceは、ジニ不純度(Gini Impurity)の減少量を説明変数の重要度として表示します。

    上のほうにある変数は、Variable Importanceの値が大きく、住宅価格の中央値に影響していることがわかります。Boston Housingデータセットでは、1戸当たりの平均部屋数(rm)、低所得者人口の割合(lstat)が住宅価格を決める際に、重要であることがわかりました。

    Feature Importance

    4.まとめ

    第2回では、PyCaretを用いた「予測モデルによる要因分析(predictive data analysis)」を解説しました。PyCaretを使用すると、コーディングに費やす時間を減らし、分析に多くの時間を費やすことができることを理解していただけたと思います。

    本シリーズでは、データサイエンスの基礎、データ分析の基本的なコード、AutoMLの活用方法などについて、グロースハックに役立つ実践的な方法を提案していく予定です。pythonコードを用いた分析手法などの紹介も行いますので、シリーズ全体を通じて皆様のお役に立てることができればと思います。


    著者プロフィール

    田口 健太郎 Kentaro Taguchi

    ソーシャルゲームのデータマイニング、原子力分野の研究コンサルタント、アクセンチュアデータ分析エンジニア、R&D推進室などを経て、技術顧問、講師、データサイエンティストを担当。2022年12月よりクロスマーケティング・グループにてデータサイエンティストとして従事。
    私たちは積極的に採用活動をしております。
    https://recruit.cross-m.co.jp/

    Companies

    エクスクリエ
    クロス・マーケティンググループ
    メタサイト
    クロス・コミュニケーション

    Tags