Web系企業での一人目の機械学習エンジニア・データサイエンティストに必要なスキルと経験して思ったこと

# ０、はじめに

マッチングアプリで機械学習エンジニアをやっているはやとと言います。今回は「Web系企業での一人目の機械学習エンジニア・データサイエンティストに必要なもの、やって感じたこと」について書いていこうと思います。

**「Web系企業で機械学習エンジニアやってみたい！」「組織としてデータ分析や機械学習をやり始めたいけど何からやったらいいかわからない！」**という方も多くいるでしょう。
Web系企業での機械学習エンジニア・データサイエンティストの動きはメルカリのブログとか本でよく見ます。しかし、まだ規模があまり大きくない会社における機械学習エンジニア・データサイエンティストの記事や本は一切見当たらず、また、立ち上げ（そんな大げさな言葉を使っていいのか分かりませんがw）の話が書いてあるものは見たことがないです。そのため、もしかしたら**日本で初めての記事になるのではないかな**と考えてワクワクしながら書いています。
まだまだ自分は駆け出しの部類でスキルが飛び抜けているわけではなく、Kaggle出身なので事業に強いわけでは決してないですが、ある程度の期間この立場をやってきたことには間違い無いので、上記で述べたような方の参考になれば幸いです。

僕のKaggleやっていたころの勉強内容はここで
https://qiita.com/Falcon__0904/items/1c20595c5e6dac4530dc


そのため、この記事は

**・Web系企業で機械学習エンジニア、データサイエンティストになりたい人
（前半部後半部両方おすすめ）
・機械学習やデータサイエンスやデータ分析組織０からを入れたい会社の人
（最初のやることと後半部の「どういうことをやるの？」と「実際にやっていて抱いた感想、元の入る前の考えとのギャップ」がおすすめ）**
こういう人にとってはかなり有益な記事になるのではないかなと思っています。

# １、前提

機械学習エンジニアやデータサイエンティストは人によって解釈が異なる職業ですが、今回の中では


・機械学習エンジニア→機械学習のモデルを作る人
・データサイエンティスト→データ分析を行う人（つまりデータアナリストも含むかも）

という前提で、
さらにエンジニアの数が業務委託を含めて5人-20人くらいの会社をここではイメージしています。

また、自分の境遇について。どこかからツッコミが来そうなので補足しておくと正社員ではなく、**僕の役職はインターンです**。ですが、正社員と同じように色々なことをやらせてもらっているほか、実際にこのような役目として動くためにどうすればいいか、本をたくさん読んだり所属している[データラーニングギルド](https://data-learning.com/guild)でアドバイスをもらったり（主体的に動ける方にはとてもおすすめです）、グループの違う会社の機械学習エンジニアの方の動きなども見させてもらい、話し合いに参加したりしています。そのため、今回の内容を書ける立場にあるかなと思っています。

自分の会社では、もちろん最初のうちアドバイスなどももらっていましたが、途中からはフィードバックももらいつつ、ひたすら自分から機械学習、データ分析関連について「これをやった方がいいと思う」と提案しつつ、まだまだ少しずつというところですが、周りを巻きもみながら自分で実装していくということを行なっています。そのため、**正社員として立ち上げる人や会社で導入したい！と思っている人にも参考になる**のではないかなと思っています。

「たった７ヶ月ぼっちしか経験してねえのに機械学習、データサイエンスを語るな！」っていうツッコミはその通りですとしか言いようがないのでやめてください笑、これからもっと頑張ります。


ついでに、自分の会社の事業について説明すると、自分が今活動をしているのはマッチングアプリで、かつ少しECサイト系っぽさも含んでいるものというイメージです。そのため、特にECサイトやマッチングアプリを行なっている人には参考になるのではないかなと思っています。

それでは本題に入っていきます。


# ２、どういうことをやるの？

主にデータサイエンティスト、機械学習エンジニアが行うことは以下の６つです。

１、分析
２、AutoMLの導入
３、レコメンド
４、不正検知（悪質なユーザーを予測など）
５、自然言語解析（解析した情報をDBに入れ込む）
６、そのほか予測や分類の自動化（価格の予測など、会社によって様々）
ちなみに大体の場合、この中で一番多くの時間を使うのは１の分析部分です笑

# ３、一人目としての必要なスキルセットについて

上に行けば行くほど重要度が高いものです。12個あって長いので読み飛ばしながら見てください笑

##＝＝＝＝＝＝＝絶対必要なもの＝＝＝＝＝＝＝＝＝

## SQL
一番上がこれかよwって思う人もいるかもしれませんが、これがぶっちゃけ一番大事です。


大体自社サービスを持っている企業って、データがGCPだったらBigqueryなどに溜まっているんですよね。そのため、これが使えないとそもそも**データを取り出すことすらできない**んですよ、データ取り出せないと機械学習もデータ分析も何もできないですよね。野球がしたいならキャッチボールできないとダメだよね、みたいな感じです。


でもあまりやっていない人もびっくりする必要なく、レベル感としては、**Progateを全て完璧に行うことができていれば、それ以上は業務の中でググりながら覚えていけばいい**と思っています。ちなみに、それだと最初のうちの精神的な負担がきついから嫌だ！っていう人もいると思うので（実際僕もこういうタイプの人間、その結果初めてSQLを触った時にはむちゃくちゃ苦労しましたw）、そういう人のためにこの発展も紹介しておきます。

10年戦えるデータ分析入門
<a target="_blank"  href="https://www.amazon.co.jp/gp/product/B010CQD4Y0/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B010CQD4Y0&linkCode=as2&tag=hayato0812090-22&linkId=0134d075ad7cafc9bc36e68673d2fe7a"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B010CQD4Y0&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=hayato0812090-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=hayato0812090-22&l=am2&o=9&a=B010CQD4Y0" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

この本はProgateの次で読むといいと言われている本です。


ちなみに余談ですが、データがBigquery上に溜まっているなんて０からとは言わないじゃないか！っていう方もいると思いますが、製造業などと比べてある程度はデータを貯めることが容易であることから、データ分析の専用の人がいなくても溜まっている場合がほとんど（溜まってなかったらごめんなさいw）であるので、今回の「０から」というのは、**いわゆるデータサイエンティストとかの界隈で論じられている「０から」とは違う意味**ですね。どれくらいデータが溜まっているかは論じるとまた長くなりそうなので、今回はこの部分については割愛します。


## 事業理解

２番目もはやプログラミングじゃないじゃんって思うかもしれませんが、実際こうだったのでこれをいれました笑


もし「一人目」という冠詞を外すならこれの優先順位を下げてもいいかもしれません。ですが、一人目であり、分析だったりモデルの前処理をbizサイド、他のエンジニアと話しながらやっていくにあたってこれは避けて通れないので優先度を高くしました。


もちろん、これは最初からできる訳ではないですが、これを意識しながら**ビジネスサイドの人が今どのような施策をしているのか、どこが利益を産むために必要な視点なのか**をわかっておく事はとても大事です。


例えば、アプリ内に機械学習のレコメンド機能を入れるとしても、「KNN」「協調フィルタリング」など様々なものがあります。しかし、ECサイトだったら「個人の好みに最適化＋目新しいものもたまに含む」というのが重要かもしれないですし、マッチング系のアプリだったら「いいねの数が分散する」ということが大事かもしれません。このようなものを意識せずに「よし、とりあえず協調フィルタリングカッコ良さそうだし実装しよw」みたいな感じだと、作っただけで、一切利益を産まない、むしろ既存のルールベースのアルゴリズムの方がいいじゃんみたいなことも起きかねない訳です。さらに、機械学習にしろデータ分析にしろ、どのような特徴を作って分析していくか、機械に学習させていくかということがとても大事です。

もちろん最初のうちはビジネスサイドの人に特徴設計してもらうとかもありかもしれませんが、ゆくゆくは**機械学習、データ分析について理解している人がそれを提案できるようになっていくことが不可欠**です。


## リーダーシップを持つマインド

おい、pythonはまだ出てこないのかよwって思うかもしれませんが、「一人目」という冠詞がつくためこれを入れました。僕は正直こういうところでマインドとか精神論を持ってくるのが好きではないですが、大事なものだったので仕方なく書いています。

リーダーシップと聞くと、「俺人マネジメント出来ねえよ」って思うかもしれませんが、ここで言うリーダーシップというものは少し意味合いが違います。必要なのは**「とにかく自分から提案して動いていく」**というものです。ビジネス側の人だって、いきなり今までやったことがなくて何やってるか分からず、かつ利益を上げるか分からないデータ分析や機械学習という取り組みを自分から進めてくれるなんて、ほぼありえないです。ぶっちゃけ僕だってビジネスメンバーだったらそんなよく分からないことに時間を使うくらいなら、もっと売上に直結することや、上の人の評価になることをやりたいですw


そのため、自分から積極的に動いていって提案するという姿勢が一番大事です。むしろ、分析をした後のアクションなどは、bizメンバーを自分が引っ張っていくくらいの形でやっていかないと形にならないことが多いです。


さらに、時には文化を作っていくということも大事です。例えば今自分はビジネス側の人にSQLの講座を行なっています。これは、僕がデータ出すより、ビジネス理解がある人である程度データを出せる人がたくさんいる方がどう考えても会社の利益になるからです。


ワンピースでルフィ一人しか戦える人いなかったら東の海すら突破できないですよね、そうじゃなくて、ゾロがいたり、サンジがいたりとみんなが戦闘ができているから強い海賊な訳です。

こうしていけば、データを見るということの浸透をできるようになり、自分はより付加価値が高い分析に集中することができます。このように、周りに技術の浸透を図っていき、自分の仕事の一部をクビにしていくのも仕事のうちの一つです。


このように、自分から動いていくという姿勢がなければただのBiz側に出しておいて、と言われた数値を出すだけのマシンになってしまいます。最初のうちはここからスタートするのもいいかもしれません。でも、それでは絶対にデータに強いチームを作ったり、機械学習を売上に直結する形で入れ込んだりすることはできないです（もちろん今ここまで自分がチームをまでここまでの形にできている訳ではありませんが）。


いきなりこれをするのは難しいかもしれませんが、まず最初に「次の自分のアクションに対して、〇〇すべきですがどう思いますか？これについて僕、私は〇〇だと思いますがどうでしょう？」みたいに自分の意見をセットで伝えるところから初めていくのがオススメですし、それをやっていくことで徐々に巻き込んでいくことができるようになります。


## Python、またはRによる前処理

はい、いよいよここでお待ちかね、ようやくみんな大好きpythonが出てきました！！！まずここで二つの言語の違いを述べておくと、

**Python→どちらかというと機械学習に強い
R→どちらかというと統計解釈に強い**
という感じです。僕は統計解釈もstatsmodelsなどのライブラリが存在してある程度は行えるため、複雑な統計処理はそこまで必要ではなく、（P値とかt分布とかできれば十分）スタートアップではPython一択だと思っています。

しかし、Rを使ったことがない身でRを外すのもどうかなと思っているので、一応のっけておきます。ですが**基本的にpythonでいい**でしょう。

Pythonで操作する必要があるライブラリは、**最低限Pandasだけ使えるようになってデータをこねくり回すことができればなんとかなります**。Matplotlib, Seabornによるデータの可視化はググれば出てきますし、Numpyを用いることは思ったよりも少ないです。scikit-learnによる機械学習モデルの構築は、後述しますが分析の前にいきなり使うというのはあまり良い選択ではないことが多いので、必要ないことが多いです。

ここまでがないと独り立ちして「一人目」として貢献するためにはやっていけないよというものです。ここまでがあれば最低限立ち上げからやっていけるでしょう。


最初から「事業理解」は無理でも、「自分で考えて次何をやるかを検討する」「SQL」「Python」は実際に会社に入る前から準備できるはずです。また、会社の中でエンジニア配置転換をして、技術志向の人なら、自分で事業目線をもっと持つ意識していくのが良いでしょう。

##＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

ここまでが絶対必要なもののラインです。他はとても重要なものもありますが、これだけあれば立ち上げから中心となって最初のうちの活動はできるかと。

##＝＝＝＝ここからはあった方がいいもの＝＝＝＝＝＝＝

## 機械学習の知見

ようやくここで来ました。具体的に何が必要なのかということについては、


**１、過学習、検証、前処理、正規化、などの理論
２、Scikit-learnのライブラリを用いた実装**
ができれば十分です。
モデルの中身について理解しなくていいの？って思う人もいるかもしれませんが、正直優先順位は低いと思います。実際僕は Kaggleでメダルを複数取ってKaggle Expertという称号を取っていて、たくさんのモデルの種類をアルゴリズムから実装まで学習してきましたが、実務で使う分には、

・その特徴の重要度がどれくらいかを明確に表せる線形回帰（ロジスティック回帰含む）
・欠損値を一切処理せずにモデルを作ることができるLightGBM
の２つだけ扱えればひとまず十分かなと、もはや**LightGBMもなしで線形回帰だけ使えれば最低限はいけます**。ちなみにどうしてこの位置なのかというと、機械学習チームの立ち上げ時期に必要なのは「機械学習」ではなく、前処理をきちんとやって分析することであるからです。ここについては後ほど詳しく話します。


## 論理的思考力

ここは僕もまだまだ足りているところではないですが、分析をしたりモデルを作る前に特徴量を洗い出す中では、「どれが一番売上に直結する」などを考えるにあたって、マインドマップをしっかり書いたり、分析にしろ、モデル作成にしろどの要素が疑似相関であるか、などを理解しながら慎重にことを進めていく必要があります。

ちなみに疑似相関というのは、例えばバスケが上手い人はバスケットシューズを全員持っているからバスケットシューズを買えばバスケがうまくなる！って考えるようなものです。もちろんシューズ買ったって練習をしないと上手くならないですよね。

このように、本当に効いてくる特徴は何なのかを理解する必要があります。このように、因果関係をきちっと見極めて、問題を分解し、どれが大事かを自分から話せるということは必須です。（これはやっていくうちに身につくので、上のものよりは優先度は下げています。）

抽象的なものですが、このようなものをやっていくためには論理的思考力はとても重要なファクターの一つです。これを身に着けるためには、自分もまだまだできているわけでは無いですが、まずは考えていることを紙に書き出したり、マインドマップを作ったりするのがおすすめです。

ちなみに余談ですが、マインドマップを書いて課題を洗い出すなどができないと、どうしても分析や予測アルゴリズムのアプローチが既存のデータありきになってしまいます。そのため、「このデータ欲しいし取れるけど今取ってないからエンジニアに提案をしよう」などのアプローチがしにくくなってしまいます。

## 統計の知見

優先度順位低すぎないw？って思う人もいるかもしれません。ですが、スタートアップで求められているのは、厳密に正しいかよりも、どっちの方が大雑把に大事かみたいなところだったりします。もちろん、明らかにデータの見方でおかしいことを言うなどはあってはならないですが、これはむしろ重要なのは論理的思考力だなと言うように感じています。ABテストで10個のデータしかなくて判断するのはまだ早いよね、など、それくらいの温度感あれば最低限は問題ないです。


実際のところ、自分は統計検定２級を一応持っているくらいのレベルで、t分布とか信頼区間をかそういうのもど忘れしてググることもあるくらいのレベル感です笑


もちろんしっかり分かっているに越したことはないですが、何か統計的に分からないものがあったら自分でググってみるなどを行うのが一番良いでしょう。しかし、今の所この状態で困ったことはあまりないですので、重要ですが優先順位はこのレベルまで下げています。

## バックエンドエンジニアの知見

これはそのサービスのバックエンドです。Rails, Laravel, Go, Djangoなどですね。これどうして必要なの？って思う人もいるかもしれません。でも、これが必要な理由が主に２つあります。


一つ目が、データの構造を一人で理解できるからです。一人目の分析者or機械学習エンジニアはデータについて精通している必要があります。しかし、一人目の分析者or機械学習エンジニアは往々にして、「こういうDBからデータが欲しいんだけど、これはどこにあるんだろう」と考えることが多いです。そのような時に、バックエンドのコードを自分で読んで理解できたら他の人の時間を取らなくて済みますよね。ちなみに僕はこれがあまりできず、周りのエンジニアの時間を取ってしまうことが多々ありました（汗）


二つ目はこれは機械学習エンジニアの場合のみに起こりうることですが、自分でフロントまで書けると何かと便利だからです。例えばRailsならDBに入れ込んだ機械学習の結果をコントローラーで取得してきてフロント画面に表示してあげる、などですね。これくらいのことなら、他の人へのコミュニケーションコストの方が大きいということもあります。そのため、もしかければ他の方の負担を減らすことができるでしょう。


まとめると、バックエンドの知見は「他のエンジニアの時間コストを奪わないためにあればより良い」というところです。ちなみに僕の会社では、バックエンドでRailsを採用していますが、僕のバックエンドのスキルは名探偵コナンでいうところの灰原哀の推理力くらいです、多分。


## インフラの知見

ここは、最低限linuxの基本的なコマンドを叩けることや、docker,circleCIって何？くらいはあればやっていけるのかなと考えています。自分は「インフラやりたい！」という希望があったため、GCP上に機械学習サーバーを立ち上げさせてもらうなど、この部分をやらせてもらいました。実際にはこの部分はどこまで行うかは実際に現場にいるインフラエンジニアの方と相談していきましょう。ちなみにインフラに入れていいのかもわかりませんが、Gitはもちろん必須です。（最悪上の４つがあれば、現場に入ってからキャッチアップしていくのもありです。）

ちなみにlinuxを学ぶ上で自分が会社の人におすすめされて読んで良かったのがLPICです。

本当に基本を学ぶならおすすめの本
<a target="_blank"  href="https://www.amazon.co.jp/gp/offer-listing/B07TD1TTYJ/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B07TD1TTYJ&linkCode=am2&tag=hayato0812090-22&linkId=88ddfc766cd3a0eb1f4eaf770e356774"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07TD1TTYJ&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=hayato0812090-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=hayato0812090-22&l=am2&o=9&a=B07TD1TTYJ" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

少しレベルの高いところまで学ぶならおすすめな本
<a target="_blank"  href="https://www.amazon.co.jp/gp/offer-listing/B07P5S98SK/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B07P5S98SK&linkCode=am2&tag=hayato0812090-22&linkId=8b479734d57151c3bddfef88a101aa09"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07P5S98SK&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=hayato0812090-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=hayato0812090-22&l=am2&o=9&a=B07P5S98SK" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

ちなみにこのLPICという民間のベンダーの認定試験はバカみたいに値段が高いので、受けることはあまりオススメしませんw


## 数学

いや、流石に優先度低すぎない！？って思う人もいるかもしれませんが、これはあくまでも最低限が必要なもので、他の人が思っているよりも優先度が低い、という理由で優先順位を下げましたが、もちろん必要ないわけではありません。


どれくらいのレベルが必要かというと、**重回帰分析とロジスティック回帰がどういうことをやっているのかなんとなく理解できれば十分**です。ただ、これ以下のレベルだと、機械学習のことを学ぶのにあたって、「どうしてここで正規化をしないといけないんだろう、、、」というようになると思うので、このレベルまでは必要かなと。そのため、決して大事でないというわけではないです。


ちなみに僕は文系難関大の数学レベルで、大学ではほぼ数学をやっていないですが、今までやっていて、「もっと数学力があれば、、、」と感じたことは一度たりともありません。ですので、理系で大学で数学をやっているような人は、間違いなくそれ以上は「Web系企業で機械学習やデータサイエンスの立ち上げを行う上では」優先順位は低いです。ですが、コードは書けるけど一切数学わからない！みたいな人はガッツリ勉強するべきです。

## AutoMLの知見

AutoMLとは、自動で機械学習を行ってくれるサービスみたいなものです。
例えば有名なものだと、顔を認識してくれるサービスや、文字を認識してくれるサービス、音声を認識してくれるサービスなどがありますね。これらはAWS,GCP,Azureなどで使われています（GCPのCloudVisionAPIなど）。後ほど機械学習はなるべく使わない方がいいという説明をしますが、AutoMLだけは別です。これは、APIを埋め込むだけなので、他のバックエンドのエンジニアでもコード読めば理解できます。


しかし、心理的に機械学習APIを使うということは彼らにとってハードルが高いはずです、そのため、調べて自分で実装してあげるということも選択肢としてはあった方が良いでしょう。（これは元からできなくても、こういう選択肢があるということを知っておくだけで十分です。ググって何とでもなります。）

## 自然言語処理の知見

これは必要かどうかは本当に会社次第なのでこの順位にしましたが、もしかしたらむちゃくちゃ大事になる会社もあるかもしれません。これはあくまで自分の想像ですが、Word2Vec化やMecabによる前処理をしてDBに情報としてうまく入れ込むなどが必要とされている場合もあるでしょう。
ちなみに僕の会社では今の所必要ではないので、あまり詳しくは話せないです笑

ここまで一旦まとめます。必要なものは優先度が高い順番に

**１、SQL
２、事業理解
３、リーダーシップを持つマインド
４、Python、またはRによる前処理
==============ここから上は必須＝＝＝＝＝＝＝＝＝＝＝＝＝
５、機械学習の知見
６、論理的思考力
７、統計の知見
８、バックエンドエンジニアの知見
９、インフラ
10、数学力
11、AutoMLの知見
12、自然言語処理の知見**


です。

# ４、やっていて抱いた感想、元の入る前の考えとのギャップ
次に実際にやっていて抱いた感想、元の入る前の考えとのギャップについて考えていきます。

## 常に事業目線を持つ
これは自分が最初全然できず、口酸っぱくグループのCTOの人に言われていたことです。機械学習ってそもそもどうして入れるかと考えたときに、**「それを入れると事業が伸ばせるから」**以外の何物でもないんですよね。特に、機械学習に関しては技術へのこだわりを持ってしまうとそれが利益にならないことが多いです。そのため、「この技術をどうして入れるのか、入れることで何が良くなるのか」を常に意識する必要があります。

## 機械学習はデータ分析の下地があってその上にある
これは一番大事な考え方です。基本的にAutoMLでアプリ上にとりあえず乗せちゃうなどができる場合は話が違いますが、Web系企業で最初にデータについて扱うとなった時、多くはBigqueryなどにデータ基盤は整っていて溜まっている場合が多いと思いますが、データ分析の下地がない場合も多いでしょう。実際に、自分の会社の強みは一人一人に対する定性の細かなサポートなどで、SQLがかける人もあまりいず、タブローなどのBIツールが導入されていた訳ではなく、あまりデータ分析が浸透していない状況でした（もちろんまだまだ今もこれから浸透させていく必要がある段階です）。

そのような状態で、機械学習によるレコメンドサービスを最初に入れるところから入ってしまったのですが、今から考えると**最初にKPIから一つ一つ掘り下げて分析をして、その中で本当に機械学習が必要なのかの判断や優先順位を決めて、それで機械学習を入れるかどうかの判断をするという順番であるべき**でした。どうしてかっていうと、それがないと本当に機械学習をすることで売り上げにつながるかがはっきりしないんですよね。そのため、まずは一人目として入る場合は**その組織にデータ分析の下地があるのか、あるとしたらそこにどのような知見があるのか**を理解した上でアクションを取るということが重要です。

## ビジネスメンバーや他のエンジニアに協力を仰ごう
機械学習エンジニア、データサイエンティストは上でも述べたようにどの特徴量を取り扱うのがいいのか、ビジネスサイドの人の協力が必須です。そのため、普段から積極的にコミュニケーションをとって、できれば自分からギブしていくことで、いざとなったら助けてもらえる関係性を作っておくこともとても大事です。

それを行い、いぜ必要になったら「どうしてそれが必要なのか、また、それを入れることでどのようなメリットがあるのか」をきちんと説明できる必要があります。僕はこの点、今CEOの方の下で今は深く掘った分析などをさせてもらえていて、とても恵まれた環境にいて、そのおかげでバリューを出せているということを感じているので感謝です。

また、他のエンジニアに協力してもらうことも不可欠です。実際機械学習の実装をしても、一人じゃどうにもならない部分があったりします。その点、自分の環境は、リードエンジニアの方に対しても自分が提案した通りにやらせてもらったりしていて、そのおかげでバリューが出しやすい環境になっているので、とても感謝です。


## ディープラーニングはいらない
機械学習って言ったら、ディープラーニングでしょ！って思う人もいると思いますが、残念ながら「一人目の機械学習エンジニア・データサイエンティスト」っていうレベル感では**ディープラーニングなんて邪魔でしかないですw**

ディープラーニングって、まずは大量のデータ（１万件とか）を集め、そのあとにモデルを作り、さらにそれをアプリ上に乗せて絶えずアップデートしていく必要があります。これらの作業って、文字を見るだけでわかると思いますが、むちゃくちゃめんどくさい訳ですよね。このようなことをやっている暇があったら、スタートアップでは大体他のことに時間を使った方が利益になることが多いですw


## 機械学習は使わないで済むなら使わない方がいい
おいおい、機械学習エンジニアが何言ってるんだよ、って思うかもしれないです。これには、機械学習による技術的な負債がとても大きいことがあります。技術的負債っていう言葉を知らない人のために補足しておくと、それを作ることによって、あとあとそれが悪影響を与える、みたいなやつです。技術的な負債の中でも主に２つに分かれます。

一つ目は、**モデルの精度の低下**です。建物とかって作った当初からどんどん古びてきますよね。それがこの機械学習でも起こります。作った当初には精度が高いものだったのに、時間が経ち、環境が変化する中でどんどん精度が下がっていきます。例えば機械学習で値段を予測するものがあったとします。その時に、ECサイトで今まで無かったおすすめ機能をリリースしたとします。機械学習で値段を予測するものがあったとします。これは、作った当時は無かった新しい機能がアプリ内に搭載されるとします。例えば、ECサイトで今まで無かったおすすめ機能をリリースしたとします。すると、その新しい機能によって、今まで正確に予測できていたどの製品ががどのくらい売上を売るのかを予測できなくなったりします。アルゴリズムが変わると今までお客さんがクリックしなかったものをクリックするようになるなどですね。そのため、従来の機械学習モデルが役に立たなります、このようになったらまた学習をやり直さないといけないですよね。これがモデルの精度の低下です。

二つ目に、**コードのブラックボックス化**です。Djangoなどを使いバックエンドも全てPythonで書いているという時は問題がないかもしれませんが、通常の自社開発ではRuby,PHP,Goなどを使っていることが多く、Pythonを書ける人材はその中では多くありません。このような中で無理に機械学習のモデルを導入してしまうと、このコードを他の人は読めず、自分しか保守できないというようなことになってしまい、とても大きなリスクを孕みます。このような理由から、バックエンドで全ての人がわかる技術ででスコアリングして単純な出し分けを行うなどで解決できるのなら、Pythonで機械学習モデルを書かない方がいいんですよね。

他にも、機械学習が必要と思われていたものの、機械学習によるモデルが売上に直結してこないこともあります。例えば、自分は一度不正ユーザーの検知を行うモデル（厳密にはスコアリングなので機械学習のモデルではありませんが）を作ったことがあります。しかし、この時必要だったのは、「不正ユーザーをある程度検知すること」ではなく、「CSの業務負担を削減するシステムの自動化」だったんですよね。実際、自分が作ったモデルによる会社への利益よりも、自動化による会社への利益の方が圧倒的に大きかったです。このように、「機械学習モデルを作る」ということに絶対にとらわれてはいけません。


**機械学習を「ただ使ってみたい！」って言っている人たちに対して「これは機械学習入れない方がいいよ」って言えるのは僕たち機械学習に精通している人だけ**なんです。それを忘れないようにしましょう。



## 一番他の人ができないものはpythonやRによるデータ整形力
「じゃあそれじゃ機械学習いらないなら俺ら存在する価値ないじゃん！」みたいに思うかもしれません。しかし、それは大きく違います。僕らの他の人にな一番の強みは**「pythonやRによるデータ整形力」**なんですよね。


ビジネスメンバーでデータ分析している人は、BIツールが使えます！とか、SQLである程度加工できます、みたいなレベルなんですよね。でも、そういう人にとって、「このデータ欲しいけど手がギリギリ届かないから諦めよう、、、、」みたいになることってよくある訳です。また、頑張ってCASE文とサブクエリとJOINをいくつも組み合わせて100行以上書いてなんとかSQLで抽出できた、、、けどこれ出すのに１日かかった、３日間近く丸々費やしてしまった、、みたいなものもよくあります。こういうものを書くときに、Pythonを使えば慣れるとSQLとの組み合わせで数時間で書けるですよね。もはやマジックみたいなもんです。これによって、**従来ビジネスメンバーがやっていた処理を３分の１、５分の１といったスピードでできたりします。**Python最強！


しかし、ここで注意して欲しいのは、データの量です。例えば中の人に聞いた話だと、ペアーズでは秒間１億アクセスなどのレベルで、SQLでとってきたものをそのままPythonで変形するのはかなり難しくなり、Sparkなども使いながらSQLで書いていくという比重が大きくなるところもあるそうです。このように、サービスの利用人数によっては全てpythonのレベルで、SQLでとってきたものをそのままPythonで変形するのはかなり難しくなり、Sparkなどの分散処理も使いながらSQLで書いていくという比重が大きくなるところもあるそうです。このように、サービスの利用人数によっては全てpythonで書くのは難しいかもしれません（Dask、Vaexといったpythonである程度重いデータを処理できるライブラリもあるらしいです、指摘感謝です。それについて自分で調べてみてわかりやすかったリンクも貼っておきます）。
Dask
https://qiita.com/simonritchie/items/e174f243bc03fb25462e
Vaex
https://qiita.com/niship2/items/c42a74675de0d7eaf49f


## AutoMLは積極的に使おう
これは先ほどAutoMLのところで説明した通りです。AutoMLはAPIなのでpython以外でも使いやすく、さらにモデルの再学習もいらないので技術的な負債になりにくいです。

# ５、終わりに

ということで以上です。会社がどうあるべきかみたいなことも書こうとしたのですが、流石にそれは僕の語ることの範囲を超えすぎている感があるので、今回はここまでにしますw

大事なところだけ摘んでまとめると、

**・SQL、事業理解、リーダーシップは想像より圧倒的に大事
・あくまでも機械学習は利益を上げるための一つのツールでしかないのでここに拘らない
・まずはデータ分析の下地が大事
・ビジネスメンバーと連携してやっていこう**


こんな感じです。スタートアップでの機械学習エンジニアって何をやるのかイメージついていないことが多いと思うので、少しでもイメージがついた、こういう人を取ればいいんだということが分かったなら幸いです。何かここは違うよー！などの意見があればもらえると嬉しいです！ちなみにこちらでツイッターやっているのでぜひ気が向いたらフォローしてください笑

僕のTwitter

https://twitter.com/falcon__0904


PS
TRIVE GROUPというところの中の株式会社キネカというところで働いています。
グループ全体でフロント、バックエンド、IOSエンジニア、データエンジニアあたりをガンガン募集しているのでぜひ興味がある方はDMください笑
デザイナーやビジネスメンバーとの距離が近く、エンジニアでも事業目線はむちゃくちゃ育つこと、雰囲気がとてもいいところが魅力です。どれくらいいい会社かっていうと、身分的にはただのインターンである自分が積極的に新しい人を採用したい！って思ってこういうことを書くくらい、いい会社です笑。エンジニアでも技術だけではなく、いわゆる「ビジネス思考」を求めている人にとってはとても良いところだと思います。
（データ分析、機械学習系の人はあまり今は募集してません、ごめんなさい笑）