因果推論を用いたポジショニングが患者の褥瘡発生率に与える影響(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.720.70
recall(再現率)実際に該当する人をどれだけ見つけられたか0.530.84
f1-scoreprecisionとrecallのバランス0.610.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) → モデルは発生者の予測に強くなってる!


※以上のことから、追加した「栄養状態」と「寝返り頻度」が、褥瘡発生の予測にしっかり効いてるってこと判明。 このモデルは、介護現場でのリスク管理や予防策の優先順位づけに役立つ可能性があると考えられます。

このブログの人気の投稿

片貝の四尺玉は世界一を連呼する『片貝賛歌~希望の花~』を作詞しました!!

小論文 統計的因果推論の現場適用による排泄ケアの展望

論文 排泄ケアにおける尊厳の保持と社会システムの課題 ~「おむつ」をめぐる心理的・文化的考察~