難易度:★☆☆☆☆
日本の医療費は、高齢化や医療の高度化を背景に年々増加し、近年は40兆円を超える規模にまで膨らんでいます。 医療費の増加を抑えるには、予防医療やリスク管理、つまり病気の発症を未然に防ぐ取り組みが重要です。 また、こうした予防的な取り組みは、個人だけに求められるものではなく、近年は企業の「健康経営」戦略として、従業員の健康作り、ひいては組織活性化につながるものとして注目されています。
そこで本クエストでは、健康意識やヘルスリテラシの向上を目的として、比較的身近な健康診断(血液検査)のデータを活用した疾患リスク予測にチャレンジします。 クエストを通じて、データ分析の基本的な流れや、ロジスティック回帰によるリスク判定モデルの構築方法、そしてビニングや多項式特徴量といった新たな特徴量生成による精度改善の方法を学びます。
今回のクエストでは、健康診断(血液検査)のデータから、「肝臓」の疾患リスクの有無を判定する機械学習モデルの作成に挑戦します。
肝臓は「沈黙の臓器」と呼ばれるほど、異変があっても自覚症状が現れにくい臓器です。普段の生活では何の問題も感じないのに、健康診断で「脂肪肝の疑いが...」、「ガンマGTPが...」と言われてドキッとした経験がある人もいるのではないでしょうか。
肝臓の病気は、体に明らかな異変が出てきた時には機能障害がかなり進んでしまっていることが多いため、健康診断などの機会に問題(疾患リスク)を事前検知しておくことが大切です。
このクエストでは、現実の健康診断と同じ検査項目を使ってモデルを構築していくため、実際の検査基準値に基づいた仮説立て、特徴量作りにトライするのも良いでしょう。
Mission 1
それでは早速、健診(血液検査)データの中身を見ていきましょう。pythonのライブラリを使って、ファイルからデータを読み込み、どのような検査項目があるのかを確認します。また、データ量や欠損値の有無なども合わせて確認し、データの概要を把握していきましょう。
- `DataFrame`形式で読み込むことで、各種データについて様々な処理を行う準備ができました。
- このタスクでは、読み込んだデータについて、その大きさを調べたり、データの型を調べる方法を学びます。
このタスクでは、データに欠損や重複がないか確認する方法と、それらが含まれる場合の対処方法を学びます。
欠損値やデータの重複をそのままにしておくと、統計的な処理や学習が上手く行かなかったり、分析において様々な弊害の原因となるため、それを回避することが必要です。
Mission 2
データの概要を確認したところで、次はもう少しデータの特徴を深堀りして見ていきましょう。通常、血液検査の項目には「基準値」(正常な人の大部分が当てはまる数値の範囲)が設定されており、項目ごとに数値の大小やデータの分布は異なっています。モデルを作成する前の事前分析として、こうした項目(変数)ごとの特徴を可視化し、データを多角的に眺めることは、良いモデルを作成するための手掛かりになります。
本ミッションでは、データを俯瞰し、データの示唆する情報を多面的に捉える方法(探索的分析やEDAと呼ぶ)を学んでいきます。
- このタスクでは、まずデータに含まれる変数の基本統計量を確認します。基本統計量とは、平均値や最大・最小値、ばらつきを表す標準偏差など、データの特徴を表す基本的な値のことです。分析を始めるに当たり、こうした基本的なデータの特徴を知ることは不可欠です。
- また、各変数に入っているデータが何かの「量」を表すもの(数量変数)なのか、あるいは何かの「性質」を表すもの(カテゴリ変数)なのかで、分析の方法は変わってきます。そこで本タスクでは、数量変数とカテゴリ変数を分離する方法と、カテゴリ変数のデータ数の確認方法も合わせて学習します。
- このタスクでは、各変数の特徴をさらに深堀りするとともに、直感的・視覚的に理解しやすい形でデータの可視化を行います。
- 具体的には、1つ1つの変数に対して、カテゴリ変数の場合は棒グラフを、数量変数の場合はヒストグラム(度数分布)を使って可視化することで、データ分布を確認する方法を学んでいきます。
- 前のタスクでは、1つの変数ごとの特徴(データ分布)を見てきましたが、今度は複数の変数間の関係性について見ていきましょう。
- 変数間の関係性を明らかにすることは、データの解釈や仮説作りを行う上でも重要です。
- このタスクでは、まず2つの変数の間の相関関係の強さ表した相関係数を算出する方法を学びます。
- 次に、視覚的にその相関係数をプロットする方法も学んでいきます。
Mission 3
データの特徴を洗い出したところで、モデル作成の準備に取り掛かりましょう。
モデルを作成するためには、モデルが扱えるような形にデータ構造を整理する必要があります。また、作成したモデルの性能を評価するための準備(評価用データの用意)も必要です。
本ミッションでは、データ構造を整理するための前処理として「ダミー変数化」と呼ばれる処理を、作成したモデルを評価するための前処理として「学習・評価データの分割」を学んでいきます。
- このタスクでは、モデリングのための基本的な前処理について学びます。
- 具体的には、カテゴリ変数の処理方法や、説明変数と目的変数の準備の方法について見ていきます。
- なお、精度改善を目的とした前処理(特徴量の生成等)はMission5で取り上げます。
このタスクでは、モデルの学習に使用する「学習用データ」と、作成したモデルの性能を評価するための「評価用データ」を準備する方法について見ていきます。
Mission 4
それではいよいよ、肝臓の疾患リスクを判定するモデルを作成していきましょう。
今回は、健康診断の受診者の属性情報(性別、年齢)と、その血液検査の結果を入力として、その人に疾患リスクが「有るか無いか」の2択で判定結果を出力するモデルを作成します。
本ミッションでは、まず基本となる機械学習モデル(ロジスティック回帰モデル)の作成と、作成したモデルをAUCという指標を用いて精度評価するまでの一連の流れを学んでいきます。
- このタスクではいよいよモデリングに取り掛かります。
- 一般的なモデル構築の流れは、`モデルの学習` ⇒ `予測` ⇒ `予測結果の評価` ⇒ `モデルの改善` を繰り返す形になりますが、ここではまずモデルの「学習」と「予測」のステップに焦点を当て見ていきます。
- このタスクではモデルの予測結果の評価方法について学んでいきます。
- 今回は肝臓の疾患が「ある」か「ない」かを判定する2値分類の問題でした。
- そこで混同行列と呼ばれる分類結果を表でまとめる方法と、AUCと呼ばれる評価指標について見ていきます。
Mission 5
作成したモデルで一定の精度は得られたものの、さらにモデルの精度を高めるための工夫を行っていきましょう。
ここまでは、検査項目ごとのデータの特徴をあまり考慮せずモデルを作成してきましたが、ミッション2で見たような基準値やデータ分布の特徴を使えば、よりモデルの精度を高めることができるかもしれません。
本ミッションでは、モデルがデータの特徴をさらに上手く表現できるように、新しい変数(特徴量)を生成したり、不要な変数を除外することで、モデルを改善する方法を学んでいきます。
- このタスクでは、特徴量を生成する方法の一つとして、ビニングについて見ていきます。
- ビニングとは、連続値を「ビン」と呼ばれる特定の区切りに分割し、非連続な値に変換することを言います。
- ビニングを行うことで、線形モデルの柔軟性を高め、判定精度を向上させることを狙います。
- このタスクでは、前回のビニングに続き、新しく特徴量を生成する方法を見ていきます。
- 今回扱うのは、多項式特徴量、交互作用特徴量と呼ばれるもので、それぞれ元の特徴量自身を掛け合わせたり、特徴量同士を掛け合わせることで作られる特徴量のことを指します。
- こうした特徴量を追加することで、モデルの柔軟性を高め、精度向上を図ります。
- このタスクでは、特徴量選択の手法の1つである、組み込み法による特徴量選択について学んでいきます。
- 前回までのタスクでは、新しく特徴量を追加することで精度向上を図ってきましたが、今度は余計な特徴量を削り、重要な特徴量だけを残すことで、精度を向上させることを目指します。
Mission 6
今回のクエストでは、健康診断(血液検査)を題材として、疾患リスクを判定するモデルの作成に取り組んできました。クエスト全編を通じて学んできたことをおさらいしましょう。
Competition
これまで学習したことを元に、SIGNATEの練習問題に挑戦してみましょう。このコンペでは、健康診断(血液検査)のデータを使って、肝疾患の有無を判定するモデル構築にチャレンジします。
Competitionに挑戦する