PyCaretで機械学習を簡単に使いこなす
近年、大企業を中心に推進されているデジタルトランスフォーメーション(DX)ですが、その中でもデータドリブン経営に基づく組織改革や競争力の維持・強化に注目が集まっています。
現時点(2022年1月時点)では、DXの必要性が社会全体に認識されつつあるものの、「勘」「経験」と「度胸」のKKD経営から脱却するための具体的なアクションに結び付けることができずに悩んでいる企業が多い状況です。
データドリブン経営を可能にするためには、以下のように大きく3つの環境が必要とされます。
- 持っているデータをデジタル化する環境
- データを分析する環境
- 分析結果に基づき意思決定をする環境
中でも、特に地方の中小規模事業者にとって問題となるのは、データを分析するために必要となる「手法」と「人材」の確保ではないでしょうか。そのようなお悩みを解決してくれるとても便利なデータ分析方法について解説します。
目次
PyCaretで機械学習を簡単に使いこなす
集計や平均値などのデータ分析は、エクセルなどの表計算ソフトウェアで行われているのが一般的です。しかしながら、データドリブン経営では、複雑に関係する様々なデータの因果関係を見える化して、そのデータの意味を経営の意思決定に利用することであるため、単純な経理データからだけでは不十分です。
目に見えない(表面に現れてこない)データの因果関係を解き明かすために、人工知能(AI)を活用することがとても有益です。
人工知能は、深層学習(ディープラーニング)と機械学習(マシンラーニング)に大別されます。高度で複雑な問題を解くためには深層学習(ディープラーニング)が用いられるのが一般的ですが、機械学習(マシンラーニング)が劣っているという意味ではありません。要は何を解くかによって道具を使い分けるイメージです。
ここで紹介するPyCaretは、機械学習(マシンラーニング)に分類されます。PyCaretは、オープンソースで開発されているPythonのライブラリで、scikit-learnやLightGBMなどの機械学習フレームワークを数行のローコード開発できるとても便利な機械学習ライブラリです。
scikit-learnなどを扱ったことがある人ならば、その手軽さを強烈に実感できると思います。PyCaretを使って分類の問題を解く手順について以下に解説します。
PyCaretのインストール
ここでは、Pythonや関連ライブラリのインストールについては省略します。PyCaretは、pipで簡単にインストールすることができます。
pip install pycaret
アヤメの分類をPyCaretで解いてみる
機械学習で有名なアヤメのデータをPyCaretで分類していきます。アヤメのデータ(CSV)は、以下からダウンロードしていただけます。
ここでは、Jupyter Labを使用してコーディングしていきます。
データの読み込み
アヤメのCSVデータを読み込むため、Pandasをインポートします。また、PyCaretの分類器についてもインポートします。
import pandas as pd
from pycaret.classification import *
CSVデータは、read_csvメソッドで読み込みます。オプションは特にしてしなくて問題ありません。PandasのDataFrameに取り込んだデータを先頭から5個分表示させてみましょう。
df = pd.read_csv("./iris-dataset.csv")
df.head(5)
機械学習の準備(setup関数)
機械学習の準備は、setup関数で行います。target引数には、目的変数となる項目名「species」を指定します。session_id引数は任意で指定可能です。
setup(data = df, target = 'species', session_id=777)
コマンドを実行すると、データフレーム内のデータタイプが自動的に設定されますので、エンターキーを押して確定します。
このsetup関数を実行することにより、読み込んだデータフレームから、目的変数と説明変数のデータローダーが作成されます。目的変数の数値化処理も自動的に行われます。
モデルの比較(compare_models関数)
次にモデルの比較を行うため、compare_models関数を実行します。
model = compare_models()
処理が完了すると、分類器ごとの一覧が高い精度の順で表示されます。それぞれの結果は、交差検証(クロスバリデーション)を実行して得られた結果となっています。
通常の機械学習では、分類器ごとにコーディングして試行していくため、とても時間がかかる作業となりますが、PyCaretを利用すると、短時間で以下のような結果を得ることができるため、生産性を飛躍的に向上させることができます。
モデルの生成とチューニング(create_model関数/tune_model関数)
compare_models関数の結果から使用する分類器を選択して、モデルを作成します。
model = create_model('qda')
10回の交差検証(クロスバリデーション)が実行され、平均値や標準偏差などの学習結果が表示されます。
次に作成したモデルのハイパーパラメータをチューニングします。PyCaretのチューニング手法は、ランダムグリッドサーチです。
tuned = tune_model(model)
tune_model関数の処理が完了すると、チューニング後の結果が表示されます。
予測する(predict_model関数)
生成したチューニング済みモデルを使用して予測を行います。引数にはチューニング済みのモデルのオブジェクト変数しか指定していませんが、この場合は、自動生成されたテストデータを使用して予測します。
predict_model(tuned)
上記の結果は一部のみですが、うまく予測できているようにみえます。
モデルの可視化(evaluate_model関数)
最後に、作成したモデルを可視化してみましょう。
evaluate_model(tuned)
以下のようなボタンが表示され、様々なグラフを表示させることができます。デフォルト表示は「Hyperparameters」となっています。
以下は、Confusion Matrix(混同行列)とDecision Boundary(決定境界)のグラフの例です。
これらのグラフから、Setosaは完全に分類できていることが理解できます。また、VersicolorとVirginicaは、一部重なっている部分があり、このモデルでは完全に分類することはできない可能性があることがわかります。
以下は、Learning Curve(学習曲線)とValidation Curve(検証曲線)のグラフの例です。これらの曲線は、作成したモデルの学習状態と汎化性能を評価するためによく利用される評価指標です。
学習曲線を見てみると、訓練スコアや交差検証スコアは、0.92から0.94付近に収束していていますので、一定の汎化性能を有しているとみることもできますが、訓練データが少なく学習不足である可能性が高いです。
また、検証曲線を見てみると、パイパーパラメータのチューニングを大きくすると訓練スコアと交差検証スコアが同じように低下していくことが理解できます。
今回の検証におけるハイパーパラメータ(reg_param)は、検証スコアが訓練スコアに比べて最も大きくなる0.49が適用されています。
まとめ
今回は、アヤメのデータをPyCaretで機械学習(マシンラーニング)して、その手軽さを体験してみました。
これまでscikit-learnなどの機械学習フレームワークを扱ったことがある人ならば、PyCaretがどれだけ簡単なのかご理解いただけたのではないでしょうか。
このようにPyCaretを活用することで、たった数行のローコードで機械学習できるようになります。データの整理もエクセルさせ使えれば特に難しいことではありません。
また、処理のほとんどが自動化されているため、ユーザは問題解決に集中できるというメリットがあります。
エンジニアやプログラマなどのIT人材が確保できない場合でも、ちょっとした努力でデータドリブン経営を実践できるかもしれません。
またDX普及のため、お客様の目前で説明と実演できるぐらいのスキルをビジネスパーソンとして持っておきたいものです。
SDGsと地方創生に関するお問い合わせについて
どんな内容でも構いませんので、気兼ねなくご相談ください。
システムエンジニアリングの経験を持つスタッフが、ボランティアでご相談に応じさせていただきます。