ふくしま

ソフトウェアエンジニア

2023年8月ソフトウェアエンジニアからデータサイエンティストになった

概要

今年2023年の8月にデータサイエンティストに転職した。 転職してから4ヶ月ほど経ったので、その備忘録をかく。

項目

  • 僕の経歴
  • なぜデータサイエンティストに転職したのか
  • 僕が入社したRistという会社について
  • Kagglerの凄さ
  • ソフトウェアエンジニアとデータサイエンティストを比較して
  • ソフトウェアエンジニアの経験が生きている話
  • これから

僕の経歴

  • Infcurion: 決済システムでソフトウェアエンジニア
  • ヤフー: 検索でソフトウェアエンジニア
  • Rist: データ分析チームでデータサイエンティスト ← new!

なぜデータサイエンティストに転職したのか

キャリアのどこかで機械学習をきちんとやりたかったから。 あとは、Software2.0とかを読んで触発されたというのもある。

2023年は機械学習をやるぞと意気込んでいたところ、Twitter上で流れてきたRistの求人を見て、応募してみたら受かった。 応募枠はポテンシャル採用だった。

当時はKaggle自体の名前は知っていたが、コンペには出たことがなかった。 まあ、Kaggle Grandmaster(の凄さもあんまり分かってなかった)がたくさんいるらしいし、変な癖はつかないだろうと思って入社した。 もちろん、年収が上がるからというのもあった。

正直なところ、当時自分が所属していたヤフーのチームは良かったし、業務内容も面白くて、辞めるかかなり迷った。 でも今は思い切って転職して良かったと思っている。毎日楽しい。

僕が入社したRistという会社について

Ristという会社については、以下の記事を読むのが手っ取り早い。

dime.jp

例えば入社時の条件として、マスター以上であれば年齢を問わず、年収1千万円以上をオファーする(2023年10月現在)。

記事中のこの一文のインパクトはすごいよね。

Kagglerの凄さ

現在、非常に幸運なことに、Kagglerの方々と一緒に仕事をしている。 仕事をするたびに、この人たちマジですごいなと思う。

データサイエンティストとしてペーペーの僕だが、凄さを列挙してみよう。

機械学習モデル作成の一連の流れに対する所作

評価指標、リーク、特徴量、モデル作成、バリデーション、パラメータ、アンサンブル、etc...。 これらの工程を課題に対して適切に設計し、コードに落とし込む。

これは本当にすごいことだ。 DevOpsのサイクル全ての工程で隙がないソフトウェアエンジニアと一緒に仕事をしているようなものだ。 それをできる人がチームにいるという安心感はすごい。

ここまで所作を完璧にするのに、どれだけモデルを作成してきたんだろうか。 計り知れない。

モデルへの造詣の深さ

自分が作成した機械学習モデルを完全に理解していて、顧客を納得させられる言語化ができる。 ここまでの理解、言語化をするには、どれだけモデル作成をして本気で向き合ってきたのか。 計り知れない。

データへの感覚の鋭さ

あるデータの特徴から思いもしなかった指摘・考察が飛んでくる。 このようなデータだとどこをどう見れば筋が良いのかという知見がある。 どのような特徴量を作成すれば良いかの知識がある。 どれだけの特徴量エンジニアリングを行ってきたのだろうか。

クライアントのことを考える

当たり前なのかもしれないが、クライアントのことを考えている。

この分析や結果がクライアントの業務にどのように意味があるのか。 クライアントが納得できる特徴量なのか。

これらの視点が常にある。

ソフトウェアエンジニアとデータサイエンティストを比較して

本質的にはあんまり変わらないと思う。

ソフトウェアエンジニアのプロダクト作成の営みについては、以下の記事が本質をついていると思う。

AIはどのような仕事ができるようになったのか?ChatGPTで変わる「優秀な人材」 - ところてん - Medium

以下は、上記の記事からの引用である。

従来のIT産業では、人間が行っている業務の中から、いかに入出力が定形なものを見つけて、それを切り出して自動化していくのか、ということに苦心していました。

...

現在では「何が入力されて、何が出力されるのが正しいのか」を適切に「要件定義」することで、入出力が不定形なものを無理やり定形化して、プログラミングによって自動化していくということが行われています。

つまり、ソフトウェアエンジニアは、「ある入力をある出力に変換するもの(プロダクト)」を作成する。 その際、複雑怪奇な現実世界(ドメイン)での入力と出力を、無理やりコードにできる形に定義(要件定義)する。

データサイエンティストがやることは、これと本質的には変わらない。 現実の入力と出力をコードにできるようにする。 その主な中身がデータであり、作成する主なコードが機械学習モデルになっただけだ。

ただし、データサイエンスの領域においては、引用記事にもある通り、プロダクトの出力が不確定なものになる。 LLMなどを考慮する場合、入力も不確定なものになる。

ソフトウェアエンジニアの経験

以下らへんの経験というか癖というかは、業務でも役立っている気がする。

  • 公式ドキュメントを参照する
  • 技術調査・調査レポーティング
  • 他人のコードを読む
  • 自分でコードを書く
  • DockerとかKubernetesとかの経験
  • 低レイヤの知識(GPUマシンを使ったりするとき)

これから

ここまで書いてきて力尽きた。 これからも頑張るます。以上。