きれいなデータなんてない!機械学習の7割はデータ収集と前処理に費やされる

2019.04.3

こんにちは!大学院生として自然言語処理の研究をしている@hikaruya8です。

最近、機械学習エンジニアやデータサイエンティストの求人が増えていることから、機械学習は華やかだという印象を持たれることが多いかもしれません。しかし、決してそうではないというのが私の意見です。むしろ「泥臭い」作業がほとんどです。もちろん、その先に非常に楽しいことが待ち受けているのですが、今回は機械学習における、その「泥臭さ」の代表的な部分「データの収集と前処理」に関して書いていきたいと思います。

※Findy Engineer Labでも先日、新卒のAI人材の初任給まとめや、2018年に新卒データサイエンティストの初任給まとめという記事を書かせていただきました。
(機械学習エンジニアやデータサイエンティストの定義は企業や条件によって様々なため、ここでは割愛させていただきます。)

機械学習で携わる時間の7割は収集と前処理に費やされる

AI・機械学習・データサイエンス・ビッグデータ。これらの言葉が日常的に使われだしてからしばらく経ち、徐々に一般社会にも浸透してきたことかと思います。しかし一方で、「AIや機械学習はなんでもかんでも解決できるものではない」、「簡単に結果が出せるように思われがちだが、実はめちゃくちゃ泥臭い」というのが、実際のところです。

では、その「泥臭い」作業とはなにか。それはタイトル通り、データの「収集」と「前処理」という工程に時間の大部分が使われることです。ちなみにタイトルの7割というのは明確な根拠があるわけでなく、機械学習に携わられる方に話をうかがうと、だいたい6〜8割あたりを挙げられる方が多いので、間を取って今回は7割としました。

以降にデータ収集と前処理とはどういうことを表すのか、どんな作業があるのかについてまとめていきたいと思います。

※本記事の著者のバックグラウンドとしては情報系の大学院生であり研究の側面が強いため、企業で行う際の苦労とは少々違う可能性も高いです。

データの収集

データ収集方法には大きく分けて3つあります。
1. 公開データを利用する
2. クラウドソーシングやアンケート、クローリングなどで自分で収集する
3. 自社(自前)で蓄積したデータを利用する

  • 1に関して目的とするデータセットがある場合は、収集という観点では比較的楽だと思います。研究の場合は関連研究の論文をひたすら読んでデータセットを見つけるという場合もあるので、大変な場合もあります。

  • 2は収集するデータを事前に十分に考える必要があります。またクラウドソーシングやアンケートをする際には金銭/人的コストとの相談にもなってきます。そしてクローリングはネット上の情報を何でも取得して使って良いわけではないので注意が必要です。

  • 3に関しては蓄積が必要なため、時間が必要です。またしばしば収集するデータ項目が途中で増えるなど、データ構造が変わってきてしまうこともあるようです。
    もちろん1~3を組み合わせることもありますし、収集したデータにさらに機械学習に必要な意味付け(アノテーション)をすることも多いです。

ちなみに研究の場では、自分の研究に利用できそうなデータセットがどこかに公開されていないか探し回ることはよくあり、私の専門分野の自然言語処理ではアノテーションに相当な時間やコストがかかるときがあります。そのためデータセットを作成し、公開している研究者/団体には非常に敬意が払われます。

前処理とは

データの前処理とは持っているデータ、もしくは得られたデータを何らかの機械学習アルゴリズムに入れる前に、そのデータに手を加えることをいいます。主に収集した「生のデータ」を学習しやすいようにきれいに整えることを言います。

前処理はなぜ必要か

仕事や研究などで行ったことがある方はわかると思うのですが、収集したデータが完璧であることは基本的にありません。ほとんどのデータではエラーやノイズ、欠損値などが含まれています。例えば人によるデータ入力ミスなどのヒューマンエラー、外れ値などがこれにあたります。またデータが継続的に収集されていないという問題も起こりえます。
それらのデータをそのまま機械学習に使用すると、精度が悪い/そもそも間違ったモデルが出来上がるなどの問題が起こりやすくなります。

データの前処理

データクレンジング(データクリーニング)

データクレンジングとはその名の通りデータをきれいにする(クレンジングする)という段階になります。上記で示したエラーやノイズ、欠損値などに対応するのがこの作業です。
一見簡単そうに見える作業ですが、データの一部ごと取り除いてしまうか、中央値を取るかなど簡単なものから、もっと複雑なものもあり、操作によって後の機械学習に影響を与えてしまうため、ある程度の機械学習における知識・経験が必要になってきます。

データの統合

データクレンジングのあとに来る作業です。データがさまざまなデータソースから収集され、データが結合されて一貫したデータが形成されます。

データの変換

モデルの必要性に応じて生データを指定のフォーマットに変換するプロセスです。データの変換には一例として以下のような方法があります。
– データの正規化
主にデータのスケーリングを実行できるように、数値データを決められた範囲、例えば0から1の範囲に変換することです。
– 汎化
特定の細かい分野ではなく、一般化することです。

なぜデータの収集と前処理に多くの時間が割かれるか

この理由としては2つあります。
一つはクラウドソーシングなどで委託しにくいということです。データの前処理というのは上のデータクレンジングで述べたとおり、前提の機械学習に関する知識がある程度必要になってきます。そのためどうしても機械学習がしたいならそれを自分/自社でやらざるを得ない場合が多いです。

2つめとしてこの泥臭い作業以外のところはフレームワークや計算機等の発達により自動化が進められています。もちろん、使う人のスキルにもよりますが、「泥臭い作業」の方が時間の占める割合が高くなりがちです。

データの収集と前処理は大変だけど、機械学習は楽しい

ここまで読んでいただいた方はデータ収集と前処理の大変さを少し感じていただけたかと思います。また日頃、これらの業務を行っている方にも共感いただけたら幸いです。もちろん、ここでは簡略化した部分もありますし、私の認識不足もあるかと思います。その際は@hikaruya8までコメントをお願いいたします。

さて、ここまで機械学習の「泥臭さ」を書いてきましたが、決して機械学習が「大変だからつまらない」ということを強調したかったわけではありません。たしかにデータ収集や前処理は時間がかかりますし、できればやりたくないと思う方も多いかと思います。

ただデータを探す/データの前処理をする前に生データを分析するということで見えてくることもあります。(ちなみに私はこのあたりの作業がわりと好きです。)
また、もちろんその先の「泥臭くない作業」は非常に楽しいものです。

あまり機械学習に携わらない方も、この泥臭さがあるということは心の片隅で覚えておいてもらえれば個人的には嬉しいです。

Findy FreelanceFindyでは機械学習に関連した職種/案件も多数、掲載しております。
また登録時にGitHub情報からプログラミングスキルを偏差値として数値化するという機械学習の技術を使用し、転職やフリーランス・副業エンジニアのサポートを行っています。
良ければご活用ください。

参考:
https://vaaaaaanquish.hatenablog.com/entry/2018/03/24/212254
https://viblo.asia/p/data-preprocessing-and-data-wrangling-in-machine-learning-and-deep-learning-Qpmlenrk5rd

読んで頂きありがとうございました! 宜しければ、エンジニアの皆様はFindyでご自身のスキル偏差値を測定してみてください。

[正社員の方]
ハイスキルなエンジニアのプレミアム転職サービス Findy

[フリーランスの方]
フリーランス・副業エンジニア向けの単価保証型の案件紹介サービス Findy Freelance

また、Findyでは年齢や勤務形態を問わず、様々な働き方で採用をしています。興味のある方は、こちらからご応募どうぞ!

Findy Engineer Labを購読してみませんか?
エンジニアの働き方やFindyの技術的な話などをお送りします!
フリーランス・副業エンジニア向け
単価保証型案件紹介サービス

エンジニアにとって魅力的な、リモートOKで週2〜3可の案件をあなたの希望単価でご紹介サポートします。

担当より:
4月中盤から高単価の案件増加中!
CTO の佐藤も「リモートかつスキルアップできそう!」と気になるくらい案件がありますので案件の詳細を是非見てくださいませ!

https://freelance.findy-code.io/
  • Category

  • About

  • Service

    フリーランス・副業向け
    単価保証型案件紹介サービス

    ハイスキルなフリーランス・副業エンジニア向けに案件紹介

    https://freelance.findy-code.io/
    ハイスキルなエンジニアの
    プレミアム転職サービス

    スキル偏差値が高いエンジニアに、人気のテック企業からオファーが届く

    https://findy-code.io/
    リアルタイムAI求人票採点サービス

    AIを使ってリアルタイムに求人票を採点

    https://findy.us/