Kaggle始めました

腕試しと自己鍛錬のためにKaggle始めました。

Kaggleとは、企業や研究者がデータを投稿し、世界中のデータサイエンティストがその最適モデルを競いあう、予測モデリング及び分析手法関連プラットフォーム及びその運営会社です。
コンペティションの内容によっては多額の賞金が出る事があり、企業も優秀なデータサイエンティストを見つけるために上位ランカーに注目しています。
誰でも無料で参加でき、腕さえあればのし上がれる熱い戦場です(笑)

 

 

とりあえず、医療系データの「Heart Failure Prediction」を使って、心不全のDEATH EVENTの予測をやってみました。

データの内容は、

age:年齢
anaemia:貧血(0:無 1:有)
creatinine_phosphokinase:CPK(mcg/L)
diabetes:糖尿病の既往(0:無 1:有)
ejection_fraction:収縮で送り出される血液の割合(%)
high_blood_pressure:高血圧の既往(0:無 1:有)
platelets:血小板数(kiloplatelets/mL)
serum_creatinine:血清クレアチニン(mg/dl)
serum_sodium:血清ナトリウム(mEq/L)
sex:性別(0:女性 1:男性)
smoking:喫煙の有無(0:無 1:有)
time:フォローアップ期間(日)
DEATH_EVENT:フォローアップ期間中の死亡(0:無 1:有)

となっており、12個の説明変数から最後のDEATH_EVENTを予測するモデルの作成を目指します。

 

読み込んだデータフレームのinfo出してみると、

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 299 entries, 0 to 298
Data columns (total 13 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 age 299 non-null float64
1 anaemia 299 non-null int64
2 creatinine_phosphokinase 299 non-null int64
3 diabetes 299 non-null int64
4 ejection_fraction 299 non-null int64
5 high_blood_pressure 299 non-null int64
6 platelets 299 non-null float64
7 serum_creatinine 299 non-null float64
8 serum_sodium 299 non-null int64
9 sex 299 non-null int64
10 smoking 299 non-null int64
11 time 299 non-null int64
12 DEATH_EVENT 299 non-null int64
dtypes: float64(3), int64(10)
memory usage: 30.5 KB

欠損値は無いようで、このまま学習に使えるかな。

 

まずはお約束の、Seabornの散布図祭りから

f:id:tp5366:20201123225523p:plain

散布図祭り

各データのヒストグラムと相関が一発で出ます。データ同士の相関はあまり無いかな?

学習モデルはランダムフォレストで、n_estimators(決定木の本数)を変えながらグリッドサーチかましてみます。

ちなみにランダムフォレストとはアンサンブル学習の一種で、複数の決定木を作って多数決で結果を決めます。エヴァンゲリオンで、マギシステムがカスパー、メルキオール、バルタザールの3つのAIの多数決になっていたのと同じ感じですかね。

余談ですが、マギシステムは独立行政法人産業技術総合研究所」に実在したそうです。システムは分子機能系を担当するCaspar(カスパー)、生命システム系を担当するBalthazar(バルタザール)、遺伝子情報系を担当するMelchior(メルキオール)に加えて、分子機能系を担当するMary(メアリー)の4つから構成されていたらしい(笑)

 

グリッドサーチの結果

Test set score: 0.9327789327789326
Best parameters: {'n_estimators': 45}
Best cross-validation: 0.8334248836500121

決定木は45本が一番性能が良かったみたいですね。

学習で使わなかった、テスト用データでのスコア(F値)は約93%

まあまあ良い感じかな~。

 

適合率 (precision):正と予測したデータのうち,実際に正であるものの割合

再現率 (recall, 感度, sensitivity):実際に正であるもののうち,正であると予測されたものの割合

F値:適合率と再現率の調和平均

 

患者さんの基礎情報や検査値等から予後が予測できるわけですね。

薬局としては患者情報から副作用のリスクを予測するシステムが欲しいのですが、データさえあれば実現可能なのかな?