13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

こんにちは!株式会社会社エイアイフィールドに新卒で入社した傍示です。現在はフロントエンドの開発を主に担当させて頂いております。この記事は株式会社エイアイフィールドアドベントカレンダー2021の18日目の記事です。この記事ではローコード機械学習ライブラリ「PyCaret」を用いてSIGNATEのコンペに挑戦していきます。

PyCaretとは

「PyCaret」とは、様々な種類の機械学習モデルの検証を数行で行ってくれるライブラリです。

回帰や分類、クラスタリング、自然言語処理など幅広いタスクに対応しており学習コストも低いので、データサイエンス初学者の方が「まずは何らかのデータ分析をしてみたい」場合にはまず試してもらいたいライブラリです。

公式サイト

動作環境

・PyCaret 2.3.5
・Google Colabratory

PyCaretはローカルで実行しようとするとPythonのバージョンなど環境によって、環境構築につまづくことが多いです。

筆者も中々苦労したので今回はGoogleアカウントがあれば誰でも同じ環境でデータ分析を行えるGoogle Colabratoryを利用します。

今回参加するデータ分析コンペ

今回はSIGANTEにある【練習問題】健診データによる肝疾患判定 にPyCaretで挑戦します。

このコンペは健康診断の数値の結果から肝疾患の有無を判断するモデルを作成する分類コンペとなっています。

データ概要
課題種別:分類
データ種別:多変量
学習データサンプル数:891
説明変数の数:10
欠損値:有り

今回のコード

今回の分析に用いたコードです。
14行でデータの読み込みから予測結果の出力まで出来ました!
同じことをPycaretなしで実行しようとすると100行以上はコードを書く必要があると思うので、ここまで簡単に実装できてびっくりしています。

PyCaretのインストール

下記のコードを実行してインストールします。

!pip install pycaret

ライブラリのインポート

csv読み込み用のpandasPyCaretをインポートします。

今回は分類問題なのでpycaret.classificationを指定しています。
回帰問題の場合はpycaret.regressionを利用します。

その他クラスタリングや、自然言語処理、異常値検知などのタスクに用いることも出来ます。

import pandas as pd
from pycaret.classification import *

データの読み込み

今回利用するデータセットを読み込みます。
今回はファイルを直接アップロードする形式を利用しています。

train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
submit = pd.read_csv("sample_submit.csv",header=None)

# データの表示
train.head()

Inked無題_LI.jpg
赤丸で囲んだ部分にcsvファイルをドロップアンドドラッグでアップロードするとGoogle Colabratory上で利用することが出来ます。

・出力結果
無題.png

今回利用するデータセットの中身になります。
目的変数はdiseaseで、0のときに肝疾患なし、1のときに肝疾患あるとなっています。

前処理

データ分析は8割が前処理と言われるほど、前処理のタスクは重要でその分コード数も多くなります。
しかしPyCaretでは前処理も1行で行ってくれます!
setup()の引数dataに利用するデータ、targetに目的変数を指定することで最適な前処理を行ってくれます。

exp_clf101 = setup(data = train, target = "disease", session_id = 123)

モデル比較

モデルを比較し精度の良いモデルを選択したいと思います。
モデルの比較も下記の1行で行うことができます!
評価指標やモデルを一覧で確認できるので便利ですね。

compare_models()

データフレームの下に表示されているのが今回一番精度が良かったモデルとそのモデルで用いているパラメータとなります。今回はExtra Trees Classifierが一番精度が高かったみたいです。

無題.png

モデル選択

モデルを選択してモデリングを行います。今回は先程一番精度が良かったExtra Trees Classifierを使用します。

model = create_model("et")

選択したモデルに対して10分割してクロスバリデーションを行った結果が出力されます。

無題.png

モデルの検証

evaluate_model(model)

完成したモデルに対してモデルの特性をROC曲線、混合行列など様々な指標で確認することができます。

ROC曲線
無題.png

混合行列
無題.png

Prediction Error
実際のクラス毎に、Positive/Negativeのどちらに予測をしたかを表示されます。
無題.png

予測と提出ファイルを作成

finalize_model()関数で使用するモデルを確定させ、predict_model()関数に今回の予測対象であるtestデータを読み込んで予測を行います。

resultのLabel列に予測結果が格納されるのでそれをsubmit用ファイルに代入してcsvを出力すれば終了です。
本当に全然コードを書いていないのに予測ファイルまで完成出来たのでびっくりしています。

# 予測
final_model = finalize_model(model)
result = predict_model(final_model, data = test)

#提出ファイル作成
submit[1] = result['Label']
submit.to_csv('submit_pycaret.csv',index=False,header=False)

無題.png

結果

AUC:0.9126912 92位/496人中
signate.png

今回のPyCaretのモデルでAUCが0.91以上となり、順位も上位20%に入れる結果となりました!
コンペにおけるBaselineとして十分活用できると思います。

おわりに

今回はPyCaretでSIGNATEのコンペに挑戦してみました。
とても使いやすく、精度も十分出せるので実務にも十分活用できると思います!

環境構築の部分もGoogle colabratoryを使うことで省略できるのでぜひ気軽に使ってみてください。

13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?