スコアを計算し、N日後の結果を予測する方法
遡及的かつ縦断的な性質の医療データセット/ EHRデータセットがあるとしましょう。つまり、1人の人が複数の時点(過去)にわたって複数の測定値を持っているということです。ここに投稿しましたが、応答がありませんでした。だから、ここに投稿する
このデータセットには、患者の診断、死亡率フラグ、ラボ、入院、消費された薬などに関する情報が含まれています。
ここで、死亡率に影響を与える可能性のある予測因子を見つけたい場合は、ロジスティック回帰を使用できます(患者が死亡するかどうかは関係ありません)。
しかし、私の目的は、人が次の30日または次の240日で死亡するかどうかを予測するのに役立つ予測因子を見つけることです。ML/データ分析手法を使用してこれを行うにはどうすればよいですか?
さらに、この人が今後30日以内に死亡する可能性を示すことができるスコアも計算したいと思いますか?スコアを計算するにはどうすればよいですか?このスコアがどのように導き出されるかについてのチュートリアルリンクはありますか?
この問題に対処するために使用できるさまざまな分析手法と、スコアを計算するためのさまざまなアプローチを教えてください。
このような問題を読んで解決してみたい
回答
これは、「単純な」二項分類の問題と見なすことができます。問題の種類は「単純」であり、タスク自体は確かにそうではありません...そして、その潜在的なアプリケーションに関する深刻な倫理的問題についても言及するつもりはありません!
まず、明らかに、患者の死亡に関するデータを入力する必要があります。あなたがこの情報を持っているかどうかは私には完全には明らかではありませんか?患者が死亡したときはいつでも、これがデータに報告されることが重要です。そうしないと、2つのクラスを区別できません。
したがって、デザインは次のようになります。
- インスタンスは、その時点での1人の患者の病歴を表します $t$、およびで生きているか死んでいるかのいずれかとしてラベル付けされています $t+N$ 日々。
- これには、データのリファクタリングが必要です。データが0から$T$、あなたは複数の時点を取ることができます $t$ と $t<T-N$ (たとえば、毎月0から $T-N$)。理論的には異なる時期だと思うことに注意してください$t$ すべてのインスタンスが一貫して同じ期間を表し、それらの特徴とラベルがそれに応じて計算される限り、同じ患者のデータで使用できます。
- 機能の設計は確かに難しい部分です。もちろん、機能にはすべてのインスタンスの値が必要であるため、一部の患者に対してのみ実行された特定のテストに依存することはできません(できますが、これらの機能にはバイアスがあります) )。
- 正直なところ、この部分を確実に実行できるとは思えません。どちらの機能も標準の同種の指標で構成されていますが、これらの指標はおそらく一般的に死の予測には不十分です。または、一部の患者に特化した診断テストが含まれていますが、患者間で均一ではないため、モデルにバイアスがかかり、過剰適合する可能性があります。
理想的には、この方法でデータを準備する前に、トレーニングデータとテストデータを分割することをお勧めします。通常は、トレーニングデータ用に期間を選択し、テストデータ用に別の期間を選択します。
データが準備されると、理論的には任意の二項分類法を適用できます。もちろん、確率的分類子を使用して確率を予測することもできますが、これは誤解を招く可能性があるため、非常に注意してください。確率自体は予測であり、患者が死亡するかどうかの真の可能性として解釈することはできません。たとえば、ナイーブベイズは経験的に常に極端な確率、つまり0に近いか1に近い確率を与えることが知られており、予測が完全に間違っていることがよくあります。これは、一般に、予測される確率は単なる推測であり、信頼度を表すために使用できないことを意味します。
[編集:例]
私たちが持っているとしましょう:
- 2000年から2005年までのデータ
- N = 1、つまり、患者が翌年に死亡するかどうかを調べます。
- たとえばコレステロール値などの単一の指標。もちろん、実際には他にも多くの機能があります。
- 毎回 $t$ 機能では、過去2年間から現在の年までの「テスト値」を表します $t$。これは、反復できることを意味します$t$ 2002(2000 + 2)から2004(2005-N)まで
次のデータを想像してみましょう(簡単にするために、時間単位は年であると仮定します)。
patientId birthYear year indicator
1 1987 2000 26
1 1987 2001 34
1 1987 2002 18
1 1987 2003 43
1 1987 2004 31
1 1987 2005 36
2 1953 2000 47
2 1953 2001 67
2 1953 2002 56
2 1953 2003 69
2 1953 2004 - DEATH
3 1969 2000 37
3 1969 2001 31
3 1969 2002 25
3 1969 2003 27
3 1969 2004 15
3 1969 2005 - DEATH
4 1936 2000 41
4 1936 2001 39
4 1936 2002 43
4 1936 2003 43
4 1936 2004 40
4 1936 2005 38
それはこれに変換されます:
patientId yearT age indicatorT-2 indicatorT-1 indicatorT-0 label
1 2002 15 26 34 18 0
1 2003 16 34 18 43 0
1 2004 17 18 43 31 0
2 2002 49 47 67 56 0
2 2003 50 67 56 69 1
3 2002 33 37 31 25 0
3 2003 34 31 25 27 0
3 2004 35 25 27 15 1
4 2002 66 41 39 43 0
4 2003 67 39 43 43 0
4 2004 68 43 43 40 0
最初の2つの列は、データの計算方法を示すためだけに記述したものであり、これら2つは機能の一部ではないことに注意してください。
Erwanによって与えられた正しい解決策に応じてユーザーが提起した質問を明確にするために、解決策は、一連のタイムスタンプにわたってデータを準備するために時間を遡ることを提案します。
入力が患者の健康、投薬、レポートなどのさまざまな機能すべてになる複数の時点「t」があります。それらを表現ベクトルに変換するのに最適な方法を確認する必要があります。ラベルはバイナリであり、患者がt + N日後に生存したかどうかを示します。ここで、Nは30、60、240などです。「t」自体は、週ごとまたは月ごとに取得できます。
この方法でデータが準備されると、それは二項分類の演習になります。
追加できる唯一の追加の考慮事項は、ここにRNNの要素が存在する可能性があることです。トレーニングデータは互いに独立しておらず、複数のタイムスタンプにわたる同じ患者の繰り返しデータが含まれている可能性があり、状況をより適切にモデル化するためにこの情報をキャプチャする余地がある可能性があります。