欠損値

データの質が機械学習の学習効果に影響を及ぼす。そのため、機械学習を行う前に、データの整形や欠損値の処理などの前処理を行い、できるだけ質の良い学習データを作るのが重要である。生物分野あるいは農学分野において観測・測定されたデータには、欠損値などを含む場合が多い。これには、気象条件により調査不能だったり、測定機械の故障だったりする原因が挙げられる。データに含まれている欠損値を適当に取り扱うことで、学習に悪影響を及ぼさなくなる。そのため、機械学習におけるデータの前処理は非常に重要なステップといえる。

欠損値の種類

欠損値は、完全にランダムで生じる欠損値や特定の条件下で生じる欠損値とがある。これらの欠損値を次の 3 種類に分けることができる。

Missing Completely At Random (MCAR)

MCAR は完全にランダムで生じる欠損値である。ほとんどの欠損値補完アルゴリズムが有効である。

Missing At Random (MAR)

MAR は、観測データに依存してランダムに生じる欠損値である。例えば、水稲標本を調べたデータで、ある品種(例えば、コシヒカリ)だけに限って特定の特徴量(例えば、乾燥重量)が欠損になっている場合である。MAR の場合は、ほかの特徴量と関係を利用して、ある程度バイアスを抑えて補正することができる。

labellengthweightn_leavesn_seeds
koshihikari20.7NA79932
hitomebore18.419.386838
tsuyahime24.220.192840
koshihikari21.429.082871
koshihikari20.3NA91925

Missing Not At Random (MNAR)

MNAR は、欠損データに依存して生じる欠損値である。例えば、水稲標本を調べたデータで、ななつ星という品種が、ほとんど栽培実験が行われていないために、そもそもデータとして収集されていないような欠損値のことである。MAR の場合、そもそもデータが少ない(存在しない)ので、補正が極めて困難である。

欠損値の除去処理

機械学習に入力するデータは一般に行列となっている場合が多い。行列中のある箇所に欠損値が含まれて、その欠損値に対して何らかの作業を施すと、その欠損値を含む行と列の両方が影響を受ける。

欠損値に対する前処理として、もっとも簡単な処理としては、その欠損値を含む行(サンプル)あるいは列(特徴)を除去することである。欠損値を含む行を取り除く場合は、サンプルサイズの減少に繋がり、モデルの信頼度や汎用性の低下を招く。また、欠損値を含む列を取り除く場合は、予測に重要な特徴量を取り除いてしまう危険性がある。予測に重要な特徴量を取り除くことで、モデルの予測性能を著しく低下させることになる。欠損値の除去処理において、いずれの場合も、モデルの予測性能の低下を招くことがあると考えられる。

欠損値を含むデータに対して、除去処理がもっとも簡単だが、モデルの予測性能の低下を招きやすい。そのため、欠損値の除去処理が一般的に使われていない。

欠損値の補完処理

欠損値を含む行あるいは列を除去する代わりに、欠損値を、特徴量の分布の特徴を利用して補完することもある。欠損値補完は、最もシンプルな方法として、欠損値となっている部分を、その特徴量全体の平均値あるいは最頻値に置き換えることで補完する。また、この他に、回帰分析を利用した線形補間や kNN、MICE などの補完方法もあり、実用上、平均値で置き換えることよりも、これらの手法がよく使われている。