因果推論を用いたポジショニングが患者の褥瘡発生率に与える影響(2)
因果推論を用いたポジショニングが患者の褥瘡発生率に与える影響(2)
前回の褥瘡発生者(1)の再現率を高めるために、栄養状態と寝返り頻度という2つの特徴量を追加して、モデルを再構築したPythonコードを考えます。
Pythonコード
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# 仮想データの生成
np.random.seed(0)
data_size = 1000
age = np.random.normal(70, 10, data_size)
gender = np.random.choice(['男性', '女性'], data_size)
health_condition = np.random.choice(['良好', '中等度', '悪い'], data_size, p=[0.5, 0.3, 0.2])
positioning_quality = np.random.choice(['良い', '悪い'], data_size, p=[0.7, 0.3])
# 新しい特徴量の追加
nutrition_status = np.random.choice(['良好', '不良'], data_size, p=[0.6, 0.4])
turning_frequency = np.random.choice(['頻繁', '少ない'], data_size, p=[0.7, 0.3])
# 褥瘡発生のロジック(新特徴量も考慮)
risk_score = (
0.3 +
0.5 * (positioning_quality == '悪い') +
0.3 * (nutrition_status == '不良') +
0.2 * (turning_frequency == '少ない')
)
bedsore_occurrence = (np.random.rand(data_size) < risk_score).astype(int)
# データフレーム作成
df = pd.DataFrame({
'年齢': age,
'性別': gender,
'健康状態': health_condition,
'ポジショニングの質': positioning_quality,
'栄養状態': nutrition_status,
'寝返り頻度': turning_frequency,
'褥瘡発生': bedsore_occurrence
})
# ダミー変数化と分割
X = pd.get_dummies(df.drop('褥瘡発生', axis=1), drop_first=True)
y = df['褥瘡発生']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# モデル学習と評価
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
出力結果
precision recall f1-score support
0 0.72 0.53 0.61 87
1 0.70 0.84 0.76 113
accuracy 0.70 200
macro avg 0.71 0.68 0.69 200
weighted avg 0.71 0.70 0.70 200
結果の解釈
褥瘡発生者(1)の 再現率が0.45が0.84 にアップできました。
指標 | 意味 | クラス0(非発生) | クラス1(発生) |
---|---|---|---|
precision(適合率) | 予測が当たった割合 | 0.72 | 0.70 |
recall(再現率) | 実際に該当する人をどれだけ見つけられたか | 0.53 | 0.84 |
f1-score | precisionとrecallのバランス | 0.61 | 0.76 |
support | 実際の件数 | 87人 | 113人 |
○参考として前回は次のよう
precision recall f1-score support
0 0.63 0.85 0.72 105
1 0.73 0.45 0.56 95
accuracy 0.66 200
macro avg 0.68 0.65 0.64 200
weighted avg 0.68 0.66 0.65 200
全体の評価
accuracy(正解率):0.70 → 全体の70%を正しく予測できた!
macro avg(単純平均): → クラス0と1の平均。バランス評価に使える。
weighted avg(件数加味の平均): → supportの多いクラスの影響が大きくなる平均。
解釈のポイント
発生者(1)の再現率が大幅に改善(0.84)! → 褥瘡が起きてる人をしっかり見つけられるようになった!これは予防にとって超重要
非発生(0)の再現率はやや低め(0.53) → 偽陽性(褥瘡がないのにあると予測)が少し増えたかも。でも、予防の観点では「見逃さない」方が大事!
f1-scoreも発生者の方が高い(0.76) → モデルは発生者の予測に強くなってる!
※以上のことから、追加した「栄養状態」と「寝返り頻度」が、褥瘡発生の予測にしっかり効いてるってこと判明。 このモデルは、介護現場でのリスク管理や予防策の優先順位づけに役立つ可能性があると考えられます。