投稿者

インターシステムズジャパン
記事 Toshihiko Minamoto · 12月 16, 2022 6m read

IRIS IntegratedML を使用した母体リスクを予測する Web アプリ

母体リスクは、医学界でよく知られているいくつかのパラメーターから測定できます。 この測定により、医学界とコンピューター化されたシステム(特に AI)を支援すべく、科学者である Yasir Hussein Shakir は、母体リスクの検出/予測における ML アルゴリズムをトレーニングするための非常に便利なデータセットを公開しました。 このデータセットは、ML の最大級のデータリポジトリとして最もよく知られている Kaggle に公開されています。

https://www.kaggle.com/code/yasserhessein/classification-maternal-health-5-algorithms-ml

データセットについて

妊娠中と出産後の母体のヘルスケアに関する情報の不足により、妊娠中の女性の多くは、妊娠に関わる問題で死亡しています。 これは、農村地域や新興国の下位中流家庭の間でより一般的に起きている問題です。 妊娠中は、状態を絶えず観察することで、胎児の適切な成長と安全な出産を保証する必要があります(出典: https://www.kaggle.com/code/yasserhessein/classification-maternal-health-5-algorithms-ml)。

データは、IoT ベースのリスク監視システムを通じて、様々な病院、地域の診療所、妊産婦ヘルスケアから収集されています。

  • Age: 女性が妊娠したときの年齢
  • SystolicBP: 最高血圧(mmHg)。妊娠中に重要な属性の 1 つ。
  • DiastolicBP: 最低血圧(mmHg)。妊娠中に重要な属性の 1 つ。
  • BS: モル濃度(mmol/L)による血糖値。
  • HeartRate: 1 分あたりの通常の安静時心拍数。
  • Risk Level: 前の属性を考慮した妊娠中の予測リスク強度レベル。

Kaggle から母体リスクデータを取得する

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

 
Health Dataset アプリケーションリファレンスを含む Module.xml
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">

  <Document name="predict-diseases.ZPM">

    <Module>

      <Name>predict-diseases</Name>

      <Version>1.0.0</Version>

      <Packaging>module</Packaging>

      <SourcesRoot<src/iris</SourcesRoot>

      <Resource Name="dc.predict.disease.PKG"/>

      <Dependencies>

        <ModuleReference>

          <Name>swagger-ui</Name>

          <Version>1..</Version>

        </ModuleReference>

        <ModuleReference>

          <Name>dataset-health</Name>

          <Version>*</Version>

        </ModuleReference>

      </Dependencies>

       <CSPApplication

        Url="/predict-diseases"

        DispatchClass="dc.predict.disease.PredictDiseaseRESTApp"

        MatchRoles=":{$dbrole}"

        PasswordAuthEnabled="1"

        UnauthenticatedEnabled="1"

        Recurse="1"

        UseCookies="2"

        CookiePath="/predict-diseases"

       />

       <CSPApplication

        CookiePath="/disease-predictor/"

        DefaultTimeout="900"

        SourcePath="/src/csp"

        DeployPath="${cspdir}/csp/${namespace}/"

        MatchRoles=":{$dbrole}"

        PasswordAuthEnabled="0"

        Recurse="1"

        ServeFiles="1"

        ServeFilesTimeout="3600"

        UnauthenticatedEnabled="1"

        Url="/disease-predictor"

        UseSessionCookie="2"

      />

    </Module>
   

  </Document>

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

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

  • リポジトリを任意のローカルディレクトリに Clone/git pull します。

    $ git clone https://github.com/yurimarx/predict-diseases.git
  • このディレクトリで Docker ターミナルを開き、以下を実行します。

    $ docker-compose build
  • IRIS コンテナを実行します。

    $ docker-compose up -d 
  • AI モデルをトレーニングするための Execute Query into Management Portal(http://localhost:52773/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen?$NAMESPACE=USER)に移動します。

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

    CREATE VIEW MaternalRiskTrain AS SELECT BS, BodyTemp, DiastolicBP, HeartRate, RiskLevel, SystolicBP, age FROM dc_data_health.MaternalHealthRisk
  • ビューを使用して AI モデルを作成します。

    CREATE MODEL MaternalRiskModel PREDICTING (RiskLevel) FROM MaternalRiskTrain 
  • モデルをトレーニングします。

    TRAIN MODEL MaternalRiskModel
  • http://localhost:52773/disease-predictor/index.html に移動し、Disease Predictor フロントエンドを使用して、以下のように疾患を予測します。 母体リスク予測器

背後の処理

母体リスク疾患を予測するためのバックエンドのクラスメソッド

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

 
母体リスク疾患を予測するためのバックエンドのクラスメソッド
/// 母体リスクの予測
ClassMethod PredictMaternalRisk() As %Status
{
    Try {
      Set data = {}.%FromJSON(%request.Content)
      Set %response.Status = 200
      Set %response.Headers("Access-Control-Allow-Origin")="*"

     
      Set qry = "SELECT PREDICT(MaternalRiskModel) As PredictedMaternalRisk, "
                  _"age, BS, BodyTemp, DiastolicBP, HeartRate, SystolicBP "

                  "FROM (SELECT "data.BS" AS BS, "
                  data.BodyTemp" As BodyTemp, "
                  data.DiastolicBP" AS DiastolicBP, "
                  data.HeartRate" AS HeartRate, "
                  data.SystolicBP_" As SystolicBP, "

                  data.Age" AS age)"

      Set tStatement = ##class(%SQL.Statement).%New()

      Set qStatus = tStatement.%Prepare(qry)

      If qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
      Set rset = tStatement.%Execute()
      Do rset.%Next()
 
      Set Response = {}
      Set Response.PredictedMaternalRisk = rset.PredictedMaternalRisk
      Set Response.Age = rset.Age
      Set Response.SystolicBP = rset.SystolicBP
      Set Response.DiastolicBP = rset.DiastolicBP
      Set Response.BS = rset.BS
      Set Response.BodyTemp = rset.BodyTemp
      Set Response.HeartRate = rset.HeartRate
 
      Write Response.%ToJSON()
      Return 1
     
    } Catch err {

      write !, "Error name: ", ?20, err.Name,
          !, "Error code: ", ?20, err.Code,
          !, "Error location: ", ?20, err.Location,
          !, "Additional data: ", ?20, err.Data, !
      Return

    }
}

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

元の記事へ さんが書いた @Yuri Marx