初めてのデータ関連タスクを終えての振り返り
はじめに
この記事はデータサイエンスに関して By データミックスコミュニティ Advent Calendar 2019の25日目の記事です。
普段ならQiitaに書くけど、ちょっとポエムな内容なのでブログに。 普段バックエンドを中心に割と何でも屋的にやっているエンジニアである筆者が、データミックスで学んだことがきっかけとなり、データ可視化・分析タスクを行った。当時の日記と主にその振り返りがてら備忘録。
やったこと
- トレジャーデータからGoogle Cloud Storageへのデータの抽出、流し込み
- Jupyter Notebookでのデータ加工、可視化
- 上記に付随した分析
- レコメンドモデルの作成
大変だったこと
知見を持った人が社内に1人もいない
文字通り。当時の日記には、
自分自身も社内にもナレッジが全くないのでグループ巻き込んでやっていきたい。楽しみ9割不安1割
と呑気なことを書いているが、調べ回るの結構大変だった。
トレジャーからどこにどのような形でデータを移せばいいかも分からない、どこで可視化すればいいかも分からない、先が見えない状態でスタートした。
結局は、先にCloud Datalabで分析することを決定。これは、データミックスの立川先生に教えてもらった。
その後は、GCP上にデータを移すということで、BigQueryにするかGCSにするか迷ったが、使ったことあるGCSを選択。
幸いにもトレジャーからGCSへの抽出は便利なワークフローがトレジャー側に用意されていたので登録ということで決着。
さらっと書いたが、ここにたどり着くまでに6営業日も要している。
全部で5500万レコードあるので、どうしようか悩み中。
悩んでいたようだ。
重すぎるデータ問題
GCSからローカルに落とし、jupyterで加工をしているが、凄く遅くて話にならない 書き方が悪いのか否かわからない
上にもちょっと書いてあるが、何しろレコード数が多く、回らなかった。
分析の上手なやり方も分からないため、自分は、6つの可視化項目に対して、全部盛り巨大データをPandasで処理して対応しようとしていた。
これだと到底回らなかったので、トレジャーからのデータのエクスポートの粒度を可視化項目単位に細かくすることで解決した。
一人で泥臭く開拓していくのってここまで大変なのかと感じた2週間くらいだった。
ただ、これで分析のための準備は終了。
レコメンドの精度合っているのか問題
精度が良いのかどうかは分からないが、見た感じだと結構推薦できてそうな雰囲気。
雰囲気はよかったっぽい笑
教師なしのクラスタリングっぽい問題なのでなんとも言えなかったが、観測範囲内ではいいものもあれば悪いものもある。
季節も影響するだろうし、何しろ商品数が多いので精度がバラついた。結局正解が分からなかった。
作成後にデータミックスの授業があったので、久松先生に伺ったところ、次元圧縮をしなければ遅いし、精度も怪しかったらしい。
確かに恐ろしい行列だった。
学んだこと
定義は大事
データ分析の前段にはどのような背景があるのかを理解するべきだと学んだ。
ライトユーザーの割合を出したいと最初に言われ、そのまま受け取ったが、進めていくうちに、それは何回Countできたらだ?と疑問になった。
そのような場面が数回ほどあったので、分析対象に関しては、数字での定義が必須だし、最初にしておくとすんなりと進めると感じた。
また、この辺は結構ドメイン知識も重要になるのではと思う。
触ってなんぼ
よく、勉強で出てきていたが、イマイチ使いどころが分からなかったが、実際に見たいものがあると分かりやすい。
これはすごく感じる。
Pandasもだいぶ書き慣れたし、一番効果があったのが箱ひげ図だった。
最初に箱ひげ図を見た時ってなんだこれしか思わなかった。
でも、自分の知ってるデータで出してみるとなんと分かりやすいもんなんだと感動。
やっぱりエンジニアはとにかく手を動かして学ばないとなとも思わせられた。
前処理が8割の格言
界隈でよく言われることだが、すごく感じた。
また、前処理が8割とよく言われるが、それがよく分かった。
日記にも書いてある。
テーブルによってデータの形式は違うし、分析したい内容次第では、めちゃくちゃ正規表現使うし、とにかくpython,pandasって感じの期間だった。
データを前処理して使いやすい形にしたものを改めてディレクトリに保存、後からそこを参照するという形に落ち着いた。
自分(技術者)が分かるだけではダメ
ビジネスサイドとの作業だが、グラフを載せる順番によって見やすさも変わるし、分析を進めていくともっとこのデータが欲しいといった依頼が来たりと、学びが多かった。
こういう感想の通り。
今回はBizサイドからの依頼だったので、めちゃくちゃ対話もしたし、結果を見せた。
その中で言葉選び一つ、グラフの見せ方一つ、分析結果の共有の仕方一つで捉え方や見やすさが変わるのだなと学んだ。
特に、共有に関しては、依頼シートにベタ打ちで最初渡してしまってすごく見にくかった。渡すフォーマットとかを考えるのって大事。
また、コードコメントを書くようにJupyterにもコメントを書くと結構捗った。
感想
総じていうと、
- 普段のインプットアウトプットを信頼していただいて新しい挑戦をすることができた
- 全ての流れを体感できた
- めちゃくちゃ手を動かして作業ができた
- 楽しさを感じることができた
- レコメンドモデル作成が一応できた
といったあたりに非常に満足感を感じている。
それに対し、
- どうしても顧客データなので即アクションに繋がらない
- 正しい(効率の良い)やり方なのか分からない
- フィードバックを受けられない
ここはすごくもどかしかった。
満足9,不満1くらいかな。
日記には、
自分で手を動かして分析したり、レコメンド作ったりととてもいい経験をすることができた。
楽しいと書いてあった。
もっと機械学習していきたいなと感じた、終わり。