概要
今の会社に入社するまで整形されたデータを扱ってきたため、実データを使って解析を行うことはありませんでした。
実データには癖があるため、それを上手く扱うためにはいろいろなスキルや注目する箇所があることに気づきました。
今回はそんなナレッジをご提供できればと思っています。!
about me
経歴
- 株式会社メルカリに18歳で入社し、現在は某B to CプラットフォームでPMDをしています。
- PMDをするまではQAを通してリリースプロセス改善を行ったり、いろいろなプロジェクトに混ってUX観点の議論を行ってきました。
現在
- 直近ではIPO関連のプロジェクトでPMをしています。
- 今回人手が足りなくなったため、ディレクションをやりながらサーバーサイドとして開発に交じることに。
- ある特定の減少が起こると会社が損失を出すパターンがある and 母数のデータが多いため、細かい条件を知る必要がある。
- 解析できるので、実データをもとに危険な状態を起こしうる事象の特徴を探すことになった。
わかったこと
その①:データを理解し、上手く扱う必要がある
基本dataは解析に必要な形にはなっていないため、望む形に変換する必要があります。
例えば、特定の注文が注文されてから、発送されるまでの時間差を計算したい場合は、datetimeモジュールを使う必要があります。
その場合、datetime.datetime、datetime.timedelta等が扱うデータになります。
また、実データから時間差を計算する場合はstringから不必要な文字を取り出す必要があったり、DataFrameに戻すためにstringに変換し直す必要があります。
「解析の9割はデータ整形」の意味がわかった瞬間だったと思います。
その②:重い処理をlocalで行う場合は、効率的な参照方法を考える
今回5万件の注文を元に特定の条件を探す必要があったのですが、5万 x 5万の二重for文を書く必要がありました。
僕の場合は、回数をわかりやすくするためにprint関数を使っていたのですが、流石に遅すぎたのでなるべく効率の良い方法を探しました。
Qiitaには闇みたいに難しい方法も書いてあるんですが、何を書いてあるのかさっぱりわからなかったので、DSチームの方に僕が理解できる範囲の方法を教えてもらいました。
また、ある程度リリースする時期が決まっているPJでは、学習コストをかけすぎないように解析する必要があることも学びました。
その③:特定の課題を解決するために、その業務を深く理解する必要がある。
仮説を立てるためには
- 今からやろうとしていることはどういうことなのか
- どういったプロセスを踏むと、その現象はおこるのか
を理解すると、より良いことがわかりました。フロー設計を行っている箇所や、ビジネス側の業務についても複数箇所理解していたので、その知識がとても役に立ちました。
また、僕はディレクター兼開発者なので、「実運用するための方法」や「どのような形で開発するべきか」を考える手助けにもなりました。
わからないときは、その業務の担当者さんに「どういう状況なのか」、「どういうことをしたら良いのか」をヒアリングしましょう。
ヒアリングは、よく起こる「不必要な開発」や「機能リリース起因のCS業務効率低下」を防ぐことにも繋がり、お互い幸せになれます。
その④:データの可視化をして、わかりやすく相手に伝える。
現在やっていることをビジネスサイドやエンジニアによりわかりやすく伝えるため、jupyterやseabornなどを使いデータの可視化を行いました。
また、特定のデータを抽出 or 算出した経緯も他の人に見せることができるため、とても解析自体がクリアになります。
jupyterのスクリーンショットを仕様所に載せるだけでも、大変有益だと知りました。
最後に:データサイエンスはめっちゃおもしろい!
僕はデータサイエンスチームやBIチームで仕事していないのですが、その人達にもわからなかったデータの因果関係を見つけることができました。
ディレクターがデータ解析方法を身に着けていると、とても相性が良いなと思いました。
まだまだ勉強することはあるので、引き続き精進します。
最後まで読んでいただきありがとうございました!!