24日目のアドベントカレンダーです。
昨日は @sasaki_17 さんの Windows10でCentOS7を入れるまでに試行錯誤した話 でした。最近はwindowsでも少しずつ環境構築が簡単になってきていますね。
これはなに?
社内でデータ分析コンペをやりました。なぜ、何をやったか残しておくことで同じような課題を抱える人がいたら活用できればいいと思って残しています
背景概要
niftyは歴史ある企業であり、さまざまなサービスが運用されています。長命なサービスも多いです。
そのためものすごく大量のログやデータが溜められていますが、正直に言うと有効活用できていないというのが現状だと思っています。
そのため、社内でのデータ活用の第一歩として、kaggle相当のコンペを社内で実現したという話です。
結論、効果
- 社内で誰がデータ活用に興味があるか、技術があるか見える化できた
- データ活用人材コミュニティの形成
- データを持っている人が誰に相談したらいいかの見える化
- データ分析をしたい人のフォロー
- 今のデータの溜め方でいいの?という議論ができそう
- 少なくとも社内でのプレゼンスは上がるよ、ということ
かなり部署をまたいで色んな人と議論できる場が作れるので、社内でのプレゼンスを上げたいとかデータ活用したいけど方針わからない、という人、あるいは組織はやってみたらいいのでは、という感じです。
また、会社視点でいうと、社内では出せるけど社外に出すにはセンシティブな情報を扱いたい、あるいはデータ活用したいけどどうしたらいいかよくわからないしそんな状態で外部のコンサルに出すのもなんとなく無駄そうだ、等の場合にある程度有効かと思います。
社内データサイエンスコンペとは
簡単に言うとkaggle相当のことを社内でしようと思いました。
kaggleって何?という人はググってください。
なぜしようとしたか
簡単にまとめると以下です
- 会社の売上増加
- 会社としてのデータ活用の推進
- 業務時間内での自身のスキルアップ
もう少し詳細は以下です。
データサイエンスへの興味
一番は自分がデータサイエンスや機械学習に興味がありきちんと業務として推進したいと考えたからです。
通常業務の中でなかなかデータ活用や機械学習にふれる機会が作れておらず悶々としていました。
社内のデータへの興味
ニフティは背景に述べたように多種多様の大量のデータが有ります。一介のエンジニアである自分には全貌は不明ですが一般論から考えてどういうデータが有ってどういう事ができるかということを考えたときにかなりのビッグデータがあることが想定できました。それらの活用で大きな売上貢献ができると思いましたしそうなれば社内でも大きなインパクトなのでもっと業務としても推進しやすくなるかなと思いました。
なにをしたか
最初に必要なこと
機械学習や実施環境構築に興味やスキルが有るメンバを巻き込みました。
今回は二人でしたが、自分では準備できない部分を準備してもらったり、単純に人手がないときに手伝ってもらったり、かなりスムーズに進みました。
そのほか準備したこと
何を対象とするか
今回の目的に会社としてインパクトのある売上増加(の先にはデータ活用の推進へのインパクトを出す)というのがあります。そのため、社内でも大きな売上が上がるようなサービスを選ぶ必要がありました。
また、そのサービスにどのようなデータが有りどこまで社内で公開できるか、どのように管理されているかなど、担当の方々を巻き込みながら進める必要があります。
何を課題とするか
サービスが決まり、ある程度データが有るとわかったあと、どのような課題を設計するかということを考える必要があります。
データによって向き不向きの課題があります。どのような課題を設計するかによって同じデータでもコンペの難易度が変わり、参加者のモチベーションや得られる成果が変わるためそういったコンサルテーション的なこともしていました。
会社を巻き込む
上記2つが揃ったところで会社を巻き込みます。分析環境として aws sagemaker を使いたいとか、ファイル共有に社内のファイルサーバー使いたいとか、そもそも業務時間としてやらせてくれとか(賞金出してくれとか)色々必要です。
特に、ニフティは自由な社風である程度裁量を持って働ける部署が多いとは思っていますが、めちゃめちゃこのコンペにのめり込んで通常業務が疎かになったり、sagemakerがクラウド死しないようにもしくはクラウド死しちゃった場合に許してもらえるように色々予算の試算をしたり環境の説明したりあらかじめ偉い人達に説明し会社として巻き込んでおく必要があるでしょう。
環境準備
環境を作成します。ネットワークやセキュリティ周りについて、自分はだいぶ苦手なので、巻き込んでおいた後輩にお願いしました。
自分はというと、コンペのサイトを作っていました。githubで公開しているのでもし使いたかったらどうぞ。(かなり突貫で作ったのでコードは汚いです。優しくマサカリ投げてください)
使いたいって人(いないとは思いますが)もしいたら、スコア計算の部分は自分で実装してもらう必要があるし、readme も作ってないので、コメントにでも書いてもらえれば多分気づけるので使い方教えます。時間あるときreadme書かないと......
実際やってどうなったか
コンペ自体
コンペ自体はそれなりに盛況で、参加者30名程度で実施されました。また、コンペ終了後日に手法の共有会を行ったり、誰が分析が得意かなどがわかったことで現場でも相談先が見える化されてよかったと思っています。
自分の変化
正直業務が果てしなく忙しいタイミングとかぶって全然コンペできなかったんですよね。つらい。
ただ、とりあえずデータを使ってなんかしたいぞ、というときの相談先として社内に認知されたようで、
データを使ったインターンやりたいみたいな相談を受けて企画したり、第二回コンペを開催したりデータ系の研修に行くときに説明が楽になったりしています。
ただ、やはり自分としては通常業務としてもうちょっとデータ分析とか機械学習に触れたいなと思っていますし、そういった機会はまだ作れていません。というのが正直なところ。
反省と振り返り
時間について
上にも書いたんですが、業務と都合つければやっていいよ、みたいな形で進めたので時間を取れた人と取れなかった人でだいぶコンペに使える時間に差が付きました。
また、そもそも参加したかったけど業務がパンパンでという人も多かったです。というか自分もです。
開催する時期が年末年度末やだとやっぱり時間取りにくかったりするので、合宿みたいな形にしたり、そもそも業務都合つけるとかじゃなくて参加者はそれだけしてていいみたいな座組を組みたかったところです。
内容について
どんなコンペだったかは詳細記載しません。ただ、一回目としては適切な難易度だったと思います。
適切な難易度だったという判断基準としては
- 二値分類にしたこと
- 時系列データではなかったこと
- テキストデータだったこと
など、とにかくkaggle のタイタニックを参考に課題設計し、基礎的な機械学習の知識があれば何からしたらいいかわからないということがないようにしました。
データについて
データは大量にありましたがとても汚かったです。ただ、これはニフティのデータが特別に汚いとかではなくて、活用を前提とした近代的なデータ蓄積をしていないデータ(例えば長命なサービスのメンテされていないデータとか)はこんなもんかなと思います。
それらのデータをコンペ前にどのくらいスクリーニングしておくのか、というのは少し意見が分かれました。が、とりあえずできるだけ生データに近い形で実施するのがいいと思ってあまり事前のスクリーニングはマジでいらなそうなデータを落としておく以外は実施しませんでした。
この辺は課題のレベル感とデータの綺麗さによるので一意な回答はないと思います。
まとめ
データは大量にあるけどどうしたらいいかわからないとか、社内で誰か活用できる人が実はいるんじゃないの?というときにデータ分析のコンペをやるのはそれなりに良い手法だと思います。最近ネットニュースでも見ました。
ただ全く機械学習などを知らない人が準備するのはそれなりに大変そうなので、もしそういう人が担当だったら周りの機械学習少しでも知ってる人を巻き込んで始めるのがいいと思います。
お断り
本コンペで活用したデータについては社員であっても見てはならない情報は適切にマスクされており、また、社員が活用するにあたって外部に流出しないよう万全のセキュリティで実施され、コンペ終了後は速やかにコンペ参加者が参照可能なデータについては破棄しました。その点情報保全意識が高く流出の恐れなどはなかったことを改めて記載しておきます。