目次

はじめに

AIやデータサイエンスに興味はあるけれど、何から始めれば良いか分からない──。
そんな方に向けて、この記事では「糖尿病リスクを予測するAIツールをゼロから構築したプロジェクト」の全体像をご紹介します。

予測モデルの作成、APIとしての公開、そしてブログで診断ツールとして活用するところまで、一連のプロセスを実践形式でまとめました。

医療知識は不要、専門的すぎる数式も使いません。
Kaggleから公開されている糖尿病関連のデータセットを用いて、Google Colabでモデルを作成し、FastAPI + RenderでAPI化、WordPressに連携するまでの実例を丁寧に解説します。


この記事で分かること

  • 無料のデータセットを使って機械学習モデルを作成する方法
  • モデルをAPI化してWeb上で診断ツールとして使う方法
  • WordPressで診断フォームを公開する方法
  • 実際に作成したツールを体験しながら学ぶことができる

プロジェクトの概要

なぜ「糖尿病リスク予測ツール」を作ろうと思ったのか?

近年、生活習慣病の1つである糖尿病はますます身近な健康リスクとなっています。特に、初期段階では自覚症状が少なく、気づかぬうちに進行するケースが多いことから、予防や早期発見の重要性が高まっています。

一方で、AIやデータサイエンスを学ぼうとしても、「実際に何を作れば良いのか分からない」という声も多く聞かれます。
そこで今回のプロジェクトでは、「実際に使える診断ツール」を作るという目的のもと、AIの学習・実装・公開の流れを一貫して体験できる内容を設計しました。

この取り組みを通して、以下のような経験が得られます:

  • 機械学習を使った予測モデルの構築
  • APIとしてのデプロイと共有方法
  • WordPressなど外部メディアとの連携

初学者でも段階を踏めばここまでできるということを、実際のツールを通して感じていただければ幸いです。


全体の進め方(Mini-MVP型)

このプロジェクトでは、Mini-MVP(最小機能実装)という考え方をベースに進めました。
これは「まずは最小限動くものを作る → その後改善・拡張していく」というアプローチです。

今回も以下のような流れで実装を進めました:

  1. シンプルな特徴量のみで構成した予測モデルを構築
  2. 予測結果とアドバイスのみ返す簡易的なAPIを作成
  3. WordPress上で診断フォームを公開し、誰でも試せるように設定

この段階でツールとしての価値が見える形になったため、無理なく継続開発に進めました。
プロジェクトの設計段階から「完璧を目指しすぎない」ことが、個人開発を継続する上での大きなポイントだと感じました。

使用したデータセットと環境

利用したデータセットについて

本プロジェクトでは、Kaggleで公開されている「Diabetes Health Indicators Dataset」を使用しました。
このデータセットは、米国のBRFSS(Behavioral Risk Factor Surveillance System)という大規模な健康調査に基づいており、生活習慣と健康状態に関する21の変数が含まれています。

具体的には以下のような特徴量があります:

  • 血圧やコレステロールの有無
  • BMI(体格指数)
  • 喫煙や飲酒などの生活習慣
  • 自覚的健康状態や運動習慣

これらのデータを使って、対象者が「糖尿病予備軍」または「糖尿病」であるかどうか(分類ラベル)を予測するモデルを構築しました。

参考:Kaggle公開Datasets「Diabetes Health Indicators Dataset」


モデル構築環境:Google Colab

モデルの作成には、Google Colab(無料のクラウド型Python実行環境)を使用しました。
Google Colabを選んだ理由は以下の通りです:

  • 無料でGPUが使える
  • 環境構築が不要ですぐにPythonコードを実行できる
  • ノートブック形式で作業の記録を残しやすい

ライブラリとしては、次のようなツールを活用しています:

  • scikit-learn(モデル作成・前処理)
  • XGBoost / LightGBM(予測モデル)
  • SHAP(特徴量の重要度分析)
  • joblib / pickle(モデルの保存)

モデル作成時の工夫点

初学者が使いやすく、かつ精度もそれなりに担保できるモデルを目指して、以下の工夫を行いました:

  1. 特徴量選択の簡略化
    モデルの学習に影響が大きい変数を中心に、必要最小限の項目に絞ってトレーニング。
    具体的には、「GenHlth(自覚的健康状態)」「HighBP(高血圧)」「BMI」などを中心に使用。
  2. アンサンブル学習の導入
    単一モデルではなく、LightGBMやXGBoostを組み合わせたスタッキングにより、予測の安定性を向上。
  3. SHAPを使った解釈性の向上
    モデルの“中身”を可視化することで、「どの要素が糖尿病リスクに関係しているか」を定量的に説明できるようにしました。
    (この詳細は次の章で解説します)

 

モデルの構築手順

ステップ1:データの読み込みと前処理

まずは、KaggleからダウンロードしたCSV形式のデータセットをGoogle Colabにアップロードし、Pandasを使って読み込みました。

次に、欠損値のチェックと、必要に応じた変数の型変換(例:整数型→カテゴリ型)を行います。
この時点で、機械学習モデルが扱いやすい形式に整えることが重要です。

import pandas as pd

df = pd.read_csv('diabetes_data.csv')
df.info()

ステップ2:説明変数と目的変数の分離

このプロジェクトでは、「Diabetes_binary(0=非該当, 1=予備軍, 2=糖尿病)」を予測対象としました。
ただし、今回は 「糖尿病 or 糖尿病予備軍」 vs 「それ以外」 という二値分類タスクに変換し、値が1または2であれば「リスクあり」としました。

df['Diabetes_binary'] = df['Diabetes_binary'].apply(lambda x: 1 if x > 0 else 0)
X = df.drop('Diabetes_binary', axis=1)
y = df['Diabetes_binary']

ステップ3:学習用データとテスト用データの分割

モデルの過学習を防ぐために、データを「学習用80%:テスト用20%」に分けます。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

ステップ4:モデルの学習(LightGBM + XGBoost)

今回は2種類の高性能分類器を使用しました:

  • LightGBM(高速かつ高精度で人気)
  • XGBoost(Kaggle常連の高性能モデル)

両方のモデルを学習させ、精度や予測確率の安定性を比較検証しました。

from lightgbm import LGBMClassifier
from xgboost import XGBClassifier

lgb_model = LGBMClassifier()
xgb_model = XGBClassifier()

lgb_model.fit(X_train, y_train)
xgb_model.fit(X_train, y_train)

ステップ5:精度の評価

accuracy_score, confusion_matrix, roc_auc_score などを使って、各モデルの性能を評価しました。

from sklearn.metrics import accuracy_score, roc_auc_score

y_pred = lgb_model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print("ROC-AUC:", roc_auc_score(y_test, lgb_model.predict_proba(X_test)[:,1]))

ステップ6:SHAPによる重要特徴量の可視化

モデルの“中身”を可視化するために、SHAP(SHapley Additive exPlanations)というライブラリを使用しました。
これにより、「どの特徴量が予測に強く影響しているか」を視覚的に確認することができます。

import shap

explainer = shap.TreeExplainer(lgb_model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)

下記画像はモデル作成の寄与度の大きい順に特徴量を並べたグラフになります。5つの特徴量(GenHlth、HighBP、Age、BMI、HighChol)で特に、モデルへの寄与度が大きいことが分かるかと思います。


ステップ7:モデルの保存

最後に、学習済みモデルを .pkl ファイルとして保存しました。
これはAPIでの活用や再利用のための準備です。

import joblib
joblib.dump(lgb_model, 'diabetes_risk_model.pkl')

このようにして、「学習 → 評価 → 可視化 → 保存」という一連の流れをシンプルにまとめ、次のステップ(API化)に進める状態を整えました。

 

APIサーバ化と共有方法

PythonモデルをそのままWebサービスにするには?

予測モデルを学習できただけでは、まだ「他人が使える形」にはなっていません。
たとえば自分のブログからそのモデルを呼び出せるようにするには、APIサーバ(予測リクエストを受け付けて返す仕組み)を用意する必要があります。


FastAPIとは?

今回使用したのは、Python製の軽量APIフレームワーク FastAPI です。

  • 簡潔なコードでRESTful APIが構築できる
  • 非同期処理(async/await)に対応
  • 自動でSwagger UI(APIドキュメント)を生成

初心者でも理解しやすく、機械学習モデルのAPI化にぴったりのライブラリです。

pip install fastapi uvicorn

実装の概要

APIはとてもシンプルな構造にしました。
入力データ(JSON形式)を受け取り、学習済みの .pkl モデルで予測し、結果とアドバイスを返します。

@app.post("/predict")
def predict(data: InputData):
# 入力整形
df = pd.DataFrame([data.dict()])
# 予測
prediction = model.predict(df)[0]
prob = model.predict_proba(df)[0][1]
# 結果返却
return {
"prediction": int(prediction),
"probability": prob,
"advice": generate_advice(df)
}


APIを無料で公開できるRenderを使う

APIを誰でもアクセスできるようにするには、クラウド上に公開する必要があります。
今回は、無料で使えるホスティングサービス「Render」を使いました。

Renderの特徴:

  • GitHubと連携してデプロイ可能
  • FastAPIやFlaskなどPythonバックエンドをそのまま動かせる
  • 無料枠あり(ただしスリープ機能があるため、初回アクセスが遅め)

デプロイの流れ(簡略版)

  1. GitHubにFastAPIコードをPush
  2. Renderで「New Web Service」を作成
  3. 起動コマンドを uvicorn main:app --host 0.0.0.0 --port 10000 などに設定
  4. デプロイボタンを押すだけで、URLが発行される!

【補足】Render無料プランでは、アクセスされていないときにサーバーがスリープ状態になります
そのため、最初のアクセスだけは10〜20秒かかることがあります。


CORS(クロスドメイン)問題と対策

Webページ(WordPress)からAPIを呼び出す際には、CORS(クロスオリジン)制限に注意が必要です。
今回はFastAPI側でCORSヘッダーを明示的に許可する設定を追加しました。

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 本来は指定URLのみ許可するのが安全
allow_methods=["*"],
allow_headers=["*"]
)

このようにして、「ローカルで学習したモデル」→「クラウド上のAPI」→「誰でも使える診断ツール」として形にすることができました。

WordPressとの連携方法

モデルをブログから使えるようにするには?

APIが完成したら、それを実際にユーザーが使える形に公開する必要があります。
最も手軽な方法は、WordPressの記事内にHTMLとJavaScriptを埋め込むスタイルです。


診断フォームの作成(HTML+JavaScript)

今回作成したのは、以下のような診断フォームです:

  • 質問は7項目(年齢、性別、BMI、自覚的健康状態、高血圧、高コレステロールなど)
  • ユーザーが入力後、「診断する」ボタンでAPIにPOSTリクエスト送信
  • 結果(リスク判定、確率、アドバイス)がページ内に即表示される

表示速度やエラー対策

  • Render(無料プラン)は最初の起動が遅いため、初回アクセスで10〜20秒待つことがあります。
  • 通信エラー時は「しばらくしてから再度お試しください」と表示されます。

セキュリティ上の注意点

  • APIに渡すデータは匿名化された数値データのみです(個人を特定しません)
  • JSコード内では https:// で始まる安全なAPIエンドポイントを使用
  • CORS対策もFastAPI側で実施済み(Access-Control-Allow-Origin

実装後の効果

このようにして、「ブログの中で診断が完結する」体験が実現しました。

  • 記事の内容と体験が直結 → 読者の関心を引きやすい
  • フォームや診断があると滞在時間が伸びる → SEOにも良い影響

 

実際に診断ツールを使ってみよう!

ここまでで、予測モデルの構築からAPI化、WordPress連携までの流れを見てきました。
このセクションでは、実際にツールを使って「糖尿病リスクの簡易診断」を体験できます。


下記の項目に答えて、ボタンをクリックするだけ!

フォームに表示されるのは、糖尿病リスクと関連性が高いとされた7つの項目です。

質問項目内容
年齢区分18歳〜80歳以上まで13段階で選択
性別男性 or 女性
BMI(体格指数)数値で入力(例:23.5)
自覚的健康状態主観的な健康状態(良い〜悪い)
高血圧の有無はい/いいえ
高コレステロールの有無はい/いいえ
コレステロール検査履歴過去5年以内に検査したか

診断の流れ

  1. 質問項目に回答
  2. 「診断する」ボタンをクリック
  3. 数秒で判定結果が表示されます

結果の内容

表示される内容は以下の通りです:

  • 判定結果:「糖尿病リスクあり」または「リスク低」
  • 予測確率:AIモデルが算出した確率(例:72.5%)
  • アドバイスメッセージ
     入力された項目に基づき、生活習慣改善のヒントを表示します。

注意事項(免責事項)

  • この診断は、Kaggleの公的データセットに基づいて作成されたAIモデルによる推測です。
  • あくまで参考・学習目的のツールであり、医学的診断や治療行為には該当しません。
  • 健康に関するご心配がある場合は、必ず医療機関の受診をお願いします。

実際の診断フォームは、以下に設置しています:

【診断フォームはこちら】

【あなたの健康チェック】






















まとめ・今後の展望

今回のプロジェクトでは、公的データセットから予測モデルを作成し、それをAPI化・Web連携するまでの一連の流れを紹介しました。

糖尿病という身近なテーマを扱うことで、実用性とデータサイエンス学習の両立を目指しました。


今回得られた学び

  • Kaggleの公的ヘルスデータを使えば、医療知識がなくても機械学習モデルが構築できる
  • SHAPなどの手法を使って、どの要素が予測に効いているかの可視化が可能
  • Google Colab × FastAPI × Render × WordPress を組み合わせれば、ほぼ無料でAI診断ツールをWeb公開できる

今後の改良アイデア

本記事で紹介した診断ツールは、Mini-MVP構成に留めてあります。
今後は以下のような発展も可能です:

  • 入力項目の拡張(喫煙、運動習慣など)
  • SHAPによる動的なリスク要因の可視化
  • 入力データに応じたカスタムアドバイス生成(自然言語処理との連携)
  • スマートフォンやLINE連携によるUXの向上

初学者でもできる「小さな実用AI」

このプロジェクトの核は、「小さく作って早く公開、必要があれば改善」という考え方です。

重要なのは、完璧を目指すよりも「動くものを作って公開する」こと。
ブログやSNSを活用して、ポートフォリオにもつなげましょう。


使用データ・免責事項まとめ

  • 使用データセット
     Kaggle Diabetes Health Indicators Dataset
  • ツール・技術
     Google Colab(モデル構築)/FastAPI(APIサーバ)/Render(無料デプロイ)/WordPress(公開)
  • 注意:このツールは教育・学習目的であり、医療的な診断には利用できません。気になる症状がある場合は、医療機関を受診ください。

最後まで読んでいただきありがとうございました!