記事
· 2023年3月23日 10m read

IRIS IntegratedML を使った腎臓病予測 Web アプリ

腎臓病は、医学会でよく知られるいくつかのパラメーターから発見することが可能です。 この測定により、医学界とコンピューター化されたシステム(特に AI)を支援すべく、科学者である Akshay Singh は、腎臓病の検出/予測における ML アルゴリズムをトレーニングするための非常に便利なデータセットを公開しました。 このデータセットは、ML の最大級のデータリポジトリとして最もよく知られている Kaggle に公開されています。https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset

データセットについて

腎臓病データセットには、以下のメタデータ情報が含まれています(出典: https://www.kaggle.com/datasets/akshayksingh/kidney-disease-dataset

  • 赤血球、足浮腫、血糖値などの 25 種類の特徴量を含む 400 行のデータセット。
  • 患者が慢性腎臓病を患っているかどうかを分類することが目的
  • 分類は、'classification' と名付けられた属性が 'ckd'(慢性腎臓病)であるか 'notckd' であるかに基づいて行われます。
  • データセットの作成者は、テキストと数値のマッピングやその他の変更点を含むデータセットのクリーニングを実施しました。 クリーニングの後、データセット作成者は EDA(探索的データ解析)を行い、データセットをトレーニングとテストに分割し、それらにモデルを適用しました。 分類結果は、最初はあまり満足のいくものではないことがわかっています。 そこで、Nan 値のある行をドロップする代わりに、ラムダ関数を使用して、それらの行を各カラムのモードに置き換えて、 もう一度データセットをトレーニングセットとテストセットに分割し、モデルに適用しました。 今度は、結果が改善され、ランダムフォレストと意思決定ツリーが、1.0 と 0 の誤分類の精度で最も良く実行することがわかりました。 分類のパフォーマンスは、混合行列、分類レポート、および制度の出力によって測定されています。

データセットの情報(出典: https://archive.ics.uci.edu/ml/datasets/chronic_kidney_disease

データセットの収集には以下の表現を使用しています。

age - 年齢
bp - 血圧
sg - 比重
al - アルブミン値
su - 糖分
rbc - 赤血球
pc - 膿細胞
pcc - 膿細胞の塊
ba - 細菌
bgr - ランダム血糖値
bu - 血液尿素
sc - 血清クレアチニン
sod - ナトリウム
pot - カリウム
hemo - ヘモグロビン
pcv - ヘマトクリット値
wc - 白血球数
rc - 赤血球数
htn - 高血圧
dm - 糖尿病
cad - 冠動脈疾患
appet - 食欲
pe - 足浮腫
ane - 貧血症
class - クラス

属性の情報(出典: https://archive.ics.uci.edu/ml/datasets/chronic_kidney_disease

24 + class = 25(数値 11 個、名義尺度 14 個)を使用します。

  1. 年齢(数値)
    年数
  2. 血圧(数値)
    bp(mm/Hg)
  3. 比重(名義尺度)
    sg - (1.005,1.010,1.015,1.020,1.025)
  4. アルブミン値(名義尺度)
    al - (0,1,2,3,4,5)
  5. 糖分(名義尺度)
    su - (0,1,2,3,4,5)
  6. 赤血球(名義尺度)
    rbc - (normal,abnormal)
  7. 膿細胞(名義尺度)
    pc - (normal,abnormal)
  8. 膿細胞集塊(名義尺度)
    pcc - (present,notpresent)
  9. 最近(名義尺度)
    ba - (present,notpresent)
  10. ランダム血糖値(数値)
    bgr(mgs/dl)
  11. 血液尿素(数値)
    bu(mgs/dl)
  12. 血清クレアチニン(数値)
    sc(mgs/dl)
  13. ナトリウム(数値)
    sod(mEq/L)
  14. カリウム(数値)
    pot(mEq/L)
  15. ヘモグロビン(数値)
    hemo(gms)
  16. ヘマトクリット値(数値)
  17. 白血球数(数値)
    wc(cells/cumm)
  18. 赤血球数(数値)
    rc(100万/cmm)
  19. 高血圧(名義尺度)
    htn - (yes,no)
  20. 糖尿病(名義尺度)
    dm - (yes,no)
  21. 冠動脈疾患(名義尺度)
    cad - (yes,no)
  22. 食欲(名義尺度)
    appet - (good,poor)
  23. 足浮腫(名義尺度)
    pe - (yes,no)
  24. 貧血症(名義尺度)
    ane - (yes,no)
  25. 区分(名義尺度)
    class - (ckd,notckd)

Kaggle から腎臓データを取得する

Kaggle の腎臓データは、Health-Dataset アプリケーション(https://openexchange.intersystems.com/package/Health-Dataset)を使って IRIS テーブルに読み込めます。 これを行うには、module.xml プロジェクトから依存関係(Health Dataset 用の ModuleReference)を設定します。

 

Health Dataset アプリケーションリファレンスを使用した Module.xml

腎臓病を予測するための Web フロントエンドとバックエンドのアプリケーション

Open Exchange アプリのリンク(https://openexchange.intersystems.com/package/Disease-Predictor)に移動し、以下の手順に従います。

  1. リポジトリを任意のローカルディレクトリに Clone/git pull します。
$ git clone https://github.com/yurimarx/predict-diseases.git
  1. このディレクトリで Docker ターミナルを開き、以下を実行します。
$ docker-compose build
  1. IRIS コンテナを実行します。
$ docker-compose up -d
  1. AI モデルをトレーニングするため管理ポータルのクエリ実行(http://localhost:52773/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen?$NAMESPACE=USER)に移動します。

  2. トレーニングに使用するビューを作成します。

CREATE VIEW KidneyDiseaseTrain AS SELECT age, al, ane, appet, ba, bgr, bp, bu, cad, classification, dm, hemo, htn, pc, pcc, pcv, pe, pot, rbc, rc, sc, sg, sod, su, wc FROM dc_data_health.KidneyDisease
  1. ビューを使用して AI モデルを作成します。
CREATE MODEL KidneyDiseaseModel PREDICTING (classification) FROM KidneyDiseaseTrain
  1. モデルをトレーニングします。
TRAIN MODEL KidneyDiseaseModel
  1. http://localhost:52773/disease-predictor/index.html に移動し、Disease Predictor フロントエンドを使用して、以下のように疾患を予測します。 Kidney-Predictor

背後の処理

腎臓病を予測するためのバックエンドのクラスメソッド

InterSystems IRIS では、前に作成されたモデルを使って、SELECT の実行により予測することができます。

 

腎臓病を予測するためのバックエンドのクラスメソッド

これで、どの Web アプリケーションもこの予測を使用して、結果を表示できるようになりました。 predict-diseases アプリケーションのソースコードは、frontend フォルダをご覧ください。

@Yuri Marxさんが書いた元の記事へ
ディスカッション (0)2
続けるにはログインするか新規登録を行ってください