機械学習の精度を左右する「データ加工」の基礎知識――「欠損値」への対処に見る「守りのデータ加工」編:「AI」エンジニアになるための「基礎数学」再入門(4)
AIに欠かせない数学を、プログラミング言語Pythonを使って高校生の学習範囲から学び直す連載。今回から2回に分けて「データ加工」の手法を紹介します。まずは「守りのデータ加工」です。
AIに欠かせない数学を、プログラミング言語Pythonを使って高校生の学習範囲から学び直す本連載『「AI」エンジニアになるための「基礎数学」再入門』。初回は、「AIエンジニア」になるために数学を学び直す意義や心構え、連載で学ぶ範囲についてお話ししました。
また第2回では、データの種類を紹介しました。そこでは、数値としてのデータ自体、あるいはその統計量には尺度によって意味のあるもの(=情報として価値があるもの)と、そうでないものがあることを確認しました。忘れてしまった方は、もう一度目を通していただくことをお勧めします。第3回では、統計について、その概念と各種統計量(「最頻値」「中央値」「平均値」「分散」など)が表す意味について学びました。そこでは、「統計量は数値として抜き出された情報である」ということを述べました。
「データ加工」は分析者にとって腕の見せどころの一つ
ここから発展的に考えてみると、「どのようにすると、より多くの情報、そしてより価値のある情報を抜き出すことができるのか?」という疑問が湧いてきませんか? 今回、そして次回の内容である、「データ加工」はまさしく、その疑問を解消するものになっています。それに加え、データ加工は分析者にとって腕の見せどころの一つです。
例として、「データと機械学習を用いることで値を予測し、その予測精度を競う」ような状況があったとします。機械学習のアルゴリズムは多くの人がディープラーニングや勾配ブースティングといった流行していて実績のあるアルゴリズムを使用することでしょう。すると、設定によって多少は上下するものの、同じデータを使っていれば基本的に皆の精度は似たり寄ったりになります。この場合、勝負の命運を分けるのは「予測に用いるデータの量と質」です。すなわち、より多く、より価値のある情報を用意したものが勝つということです。
データ加工は知識、スキル的にも基本中の基本の領域なので、地味、泥臭いなどといったイメージを持たれがちです。しかし、先ほど説明したように、非常に重要な領域なので、いい加減にせずしっかりと学んでいきましょう。
「欠損値」への対処
「欠損値」とはその名の通り、値が入っていない要素のことを指します。例として、図1を見ると、「体脂肪」列の最終行にあるもので本来は値は存在しませんが、データの表示方式によって「NaN」「null」「NULL」などと表示されていることもあります。
このような欠損値が発生する原因は大まかに3つあります。
- 偶然
- 他の値の影響
- 元の値(あるいはデータとして保持していないもの)の影響
欠損値が生じた原因は、データを生成した担当者に問い合わせる。あるいは、欠損値の場合と値が存在する場合とで他の列の平均値などを算出し比較することで特定できます。
欠損値は、そのまま放っておくとプログラムがエラーを起こしたりする原因となります。よって、欠損値が存在する行を削除するか、欠損箇所に仮の値を埋めるなど対処する必要があります。
ただし、万能な対処法はありません。それはデータの行数や欠損値の発生頻度によって最適な対処方法が変わるからです。あくまで目安的なものになりますが、発生原因別の一般的な対処法を確認していきましょう。
【1】欠損値が偶然生じている場合
関連記事
- 数学ができると「数学ができないエンジニアはダメだ」の効果が計れる
数学ができるとエンジニアとして活躍できるのか、むしろ数学ができないとエンジニア失格なのか?――「エンジニアに数学の知識は必要か?」を、数学オタクが論理的に解説します。 - [Python入門]Pythonってどんな言語なの?
機械学習に取り組んでみたいという人に(そうでない人にも)向けて、Pythonプログラミングを基礎からやさしく解説する連載をPython 3.10に合わせて改訂します。 - Pythonで機械学習/Deep Learningを始めるなら知っておきたいライブラリ/ツール7選
最近流行の機械学習/Deep Learningを試してみたいという人のために、Pythonを使った機械学習について主要なライブラリ/ツールの使い方を中心に解説する連載。初回は、筆者が実業務で有用としているライブラリ/ツールを7つ紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.