Nucoアドベントカレンダー
株式会社Nucoは企業様に対して機械学習システム導入のお手伝いをさせて頂いてます。
自然言語処理、画像処理あたりがメインです。
本番環境へ組み込むためのインフラやWebシステムの開発もやってます。
といっても、まだ社員は3人+入社予定1人しかいません。
アドベントカレンダーにチャレンジした理由は、こんな少人数な会社でアドベントカレンダーやったら、おもしろいかな、くらいの理由です。
機械学習以外の内容も多分書かれるんじゃないかな、と思いますが早速始めていきます。
機械学習案件の注意点
設立から間もないですが、いくつかお仕事させて頂いたり、相談頂く中でこんなことに注意した方がいいんじゃないのかな、と思うことをシェアさせて頂きます。
## KPIを確認する
ご相談頂く中で1番最初に確認するのは、機械学習をシステムに導入することによって達成したいKPIです。
これを確認することで、『AI使って○○したいんだけど~』みたいな地雷失敗しそうな可能性の高い相談を排除したり、お客様をよりよい方向に導くことが出来ます。
機械学習を使おうが使わまいが、手段と目的を逆にしてしまった場合その計画は破綻します。
AIを使うこと自体が目的になってないか、そもそも何を達成したいのかを確認しましょう。
あとAIっていう言葉使うのヤメテ
ま、機械学習に限らずですね。
## データの形式を確認する
これに関しては完全に私が悪いのですが、以前こんなことがありました。
お客さん『こんなデータ(CSV)なんですけど、人手でやってる分類を自動化したいんですよー』
僕『ほうほう、ふんふん。はい、大丈夫そうです。とりあえずどの程度精度がでるか一旦検証してみましょう。御見積出しますね。』
お客さん『おっけー』
僕『データはこれで全量ですか?』
お客さん『これはサンプルデータで一部になります。全量は渡すのは時間かかるので、今度でいいですか?』
僕『サンプルデータでも十分な量あるので、大丈夫と思います。』
~~前処理実装~~
~~分類器実装~~
僕『こんな感じになりました~。テストデータでの精度がこんなんで~(略』
お客さん『おお!これは使えそう!』
僕『本番データもらえたら、そっちで学習と予測やってみますよー』
お客さん『おkやで~。FTPサーバの情報おくるで~。』
僕『おkやで~』
~~ファイルローカルで確認~~
僕『あれ、サンプルデータと全然ちゃうやんけ!』
僕『これどうなってるんですか?』
お客さん『DBからの生データはこれなんですよー』
僕『ひぇっ…』
どうやら本番のDBは、正規化されておらず。下記のようなDB構造になっていた。(実際とは異なりますがイメージはこんな感じです。)
ID | USER_ID | KEY | VALUE |
---|---|---|---|
000001 | 0000001 | name | ほげ太郎 |
000002 | 0000001 | 登録日 | 20171201 |
000002 | 0000001 | ○○Flag | 1 |
000003 | 0000001 | 最寄り駅 | 13392 |
000004 | 0000001 | 地域 | 1239 |
サンプルデータはなぜかきれいにUSER_ID毎に各カラムの値が一行に収まっていたが、
本番データはそうではなかった。しかもNullableなデータはレコード自体が存在していない場合もあったり、
まあ、細かいことは良いとして、とにかく本番データとサンプルデータの形式が全然違っていた。
しかも謎に同じような構造の他のテーブルがあって、そっちにも同じユーザーの他のデータがあったりと、なかなかつらみの深いデータ構造だった。
事前に確認しなかった僕が悪いのだが、
ここから徹夜でデータ構造を変換するプログラムを書く羽目になって、
ちょっと大変な目にあった。
最後に
他にも機械学習案件進めていく上で、
注意点はたくさんありますが、一日目はここまでにしましょう!
他のメンバーが書く記事も是非読んでください。