【機械学習】データが少ない時に試す技4選

AI、技術的な話

データサイエンスや機械学習の世界では、十分な量のデータが利用できることが理想的ですが、現実には必ずしもそうとは限りません。

プロジェクトを進める上で、データが限られている状況に直面することは本当によくあります。

しかし、データが少ないからといって絶望する必要はないのです!

この記事では、そんな状況に対処するための4つの打ち手を紹介します。

 

そもそも少量データとはどれくらい?

少量データの具体的な定義は私の知る限りありません。

そもそも原理的にはデータからフィッティング行ってるだけなので、ある程度のデータがあれば予測モデルの構築自体はできるんだと思います。

従って、データの多寡は作成した予測モデルの精度が高いか、低いかで判断することになります。

一般的に言われているのは1000行以上が望ましいという話をよく聞きます。

私の経験からすると、数十行~100行でモデリングをしても精度は当然低いですが得られるものはあるのかな?という感触です。

過去の記事でも触れていますが、むしろデータ量というより、質が大事だと思います。

 

また、データの列数と行数のバランスも重要で、一般的に横長のデータ(列数が多いデータ)は分析が難しいと言わてれいます。

データ量の目安として参考までに医療分野の世界では、列数は行数の10~15分の1と言われており、つまり、100行のデータだったら、100行×10~15列くらいが目安ということになります。

 

 

①特徴量エンジニアリングを行う

データが少ない場合、その限られたデータからより多くの情報を引き出すことが重要です。

特徴量エンジニアリングは、それを実現するための強力なツールです。

既存の特徴量を組み合わせたり新しい特徴量を生成したりすることで、データの表現力を高め、結果として精度向上につなげることができます。

具体的には既にある特徴量同士を足し引きしたり、割合を求めたりすることです。

もちろん特徴量同士を計算させる際にその結果にちゃんと意味がある必要があります。

例えば、

戸建てにおける「1階フロアの面積」+「2階フロアの面積」=「戸建ての総面積」

といったように、足し合わせた結果、戸建ての特徴をより捉えた特徴量とすることができます。

 

実際に特徴量エンジニアリングをしようとする、データの背景つまりドメイン知識を持っていることがとても重要になります。

ドメイン知識についてはこちらの記事でも詳しく書いています⇒過去の記事

ドメイン知識を活用して特徴量を作成することで、データからさらに意味深い洞察を得ることができます。

 

 

②そのままモデリングしてみる

データが少ない場合でも、状況によってはそのままモデリングを行わないといけないこともしばしばありますよね。

しかし大抵の場合、交差検定の各精度指標のバラツキが大きかったり、特徴量の影響度に納得感がなかったりします。

つまり、学習データが少ないことでモデルの安定性が損なわれてしまっているのです。

 

そんなときによく行われる手法として、

ランダムシードを変えて複数回モデルを構築し、その結果の平均を取ることで、モデルの安定性を高めることができます。

具体的なやり方としては、交差検定(CV=5)を10回繰り返してそれぞれ平均を取るといったやり方です。

これにより、学習データのばらつきに対処することができ、大幅な精度改善は難しいかもしれませんが、データが少ないながらもより汎化性能を持たせたモデルを構築することが可能です。

 

③データを取得する

やはり、データが少ない状況では大幅な精度改善は難しいので、思い切ってデータを取得することも選択肢の一つです。

とはいえデータを取得する際にやみくもにデータを取得するのではなく、精度向上に寄与するデータを持ってくることが効率的で理想です。

精度向上についてはいくつか考え方があると思うのでデータ追加の文脈で挙げてみると

  1. 純粋にデータ量を増やし、適切な学習をさせることで精度を上げる
  2. 既存のデータと異なる傾向のデータを追加し、汎化性能を上げる

つまり、データを追加するにしても、

”どのくらい精度を上げたいのか?”

”現状のモデルではどのように(どの範囲を)予測を外してしまうのか?”

といったことをきちんと把握、分析した上でデータを新たに取得するべきです。

 

データ取得のコストが高い場合こそ、計画が大事なんですね。

逆に、データ取得にコストがほとんどかからないのであれば、どんどん追加していけばよいですが、上記の内容はモデルの精度改善にも繋がるので分析は怠らないようにしましょう。

 

 

➃データを生成する

最後に紹介する手法は、統計的手法に頼ってデータを生成してしまいましょう!という趣旨です。

一時期、GAN(敵対的生成ネットワーク)という言葉が有名になりました。

GANの詳細は省きますが、似たような画像をAIが大量に作り出す様を初めて見たときは驚いたもんです。

 

”似たような画像を作る”ことができるのであれば、それと同じようなことを機械学習のテーブルデータでもやってしまおうということです。

それを可能にしているのがCTGAN(Conditional Tabular General Adversarial Networks)と呼ばれるGANです。

CTGANはすでに手元にあるデータを学習させ、あとは生成したいレコード数を指定するだけで簡単にテーブルデータの生成ができてしまいます。

 

非常に便利な機能に思えますが、実際に使う際には次の注意が必要です。

  • CTGANは学習データに偏りがあった場合、その偏りが生成したデータにも反映されてしまう可能性がある
  • 生成したデータが元のデータと同じような傾向を持っているかの確認は必須

正直、私としてはこのCTGANを使う場合はかなり慎重になると思います。

結局は”似たデータ”を作っているにすぎず、常にそのデータの本質を捉えることができるとは限らないからです。

Kaggleといったコンペなどで、何が何でも精度を上げることが全て!という状況なら構わないのですが、実際のビジネスではそうもいきません。

予測結果をもとに何かしらの意思決定をするわけですから、本当に偽のデータを使ってよいのか、使った場合どのような影響がでてくるのかということをちゃんと考慮しながら評価を行う必要があります。

とても面白い技術ではあると思うんですけどね。

 

まとめ

ということで、データが少ないときに取れる打ち手をいくつか紹介しました。

でもやっぱり、データが少ないときは頑張ってデータを溜めるのが一番だと思っています。

やみくもにデータを溜めるのではなく、機械学習に有効となるデータを効率的に溜める習慣をつけることが重要なんじゃないでしょうか。と思う今日この頃です。

 

コメント

タイトルとURLをコピーしました