AIソリューションアーキテクトのおしゃべり

Data,AI系のキャリアや書評、技術紹介をメインにゆるくやります。

自己紹介

初めてこのブログに来た方々向けのトップ固定記事です。

初めてblogを見ていただいた方へ

初めまして。本ブログを訪問いただきありがとうございます。
Hirosato Gamoと申します。

本ブログではデータ活用に関する色んな話題やワインを扱う予定ですが、記事を見てふと「この人、怪しいかもしれない。そのうち壺とか買わされるかもしれない」と不安に思われた方のために自己紹介的な記事を上げておくことにしました。

普段は外資系IT企業でAIのソリューションアーキテクトという職業をしています。
16Personality性格診断ではエンターテイナー。向いてない職業はエンジニア*1
どうですか、聞けば聞くほどどんどん不安になってくるでしょう。

どうかご安心してください。高額な壺販売とか始めないし情報商材も売る気もございません。*2

特定企業の応援感出ちゃうと公平性に欠けるので所属企業名は本ブログでは出しませんが、プロフィールはLinkedInに掲載しているので、怖くなった方はそちらをご覧ください。

それでも不安に思われた方は↓の方を見ていって、33歳2児の子持ちAIソリューションアーキテクトの半生を少しでもご覧いただければ幸いです。
もしこれを読んで怪しい壺を買いたくなってしまったら、私に隠れた壺売りの才能があるかもしれませんが、たぶん大丈夫でしょう。

学生時代のこと

小中高は野球しかしてなかったので置いておいて、大学時代はしがない工業大学で機械工学を専攻してました。鳥人間コンテストに青春をかける学生たちで溢れかえる広大なキャンパス。実験とレポートに追われ、大学3年次には早くもパイプいすを繋げてベッドにする高等技術を身に着けました。

特に何の変哲もない、何なら若干意識低い系の学生だったと思います。

この状態からITの「I」の字もデータの「デ」の字も出てこないわけですが、 大学4年次に入った研究室で、たまたまデータ解析系(逆問題解析)を扱います。 いわゆるビッグデータとは真逆の劣決定性(データが少ない)問題を扱っていたわけですが、 意外とRidge回帰だの特異値分解だの統計学の基本的なものを学ぶことになります。

プログラミング言語もここでかじる程度に経験しました。 データサイエンスや機械学習なんて言葉は当時ほとんど聞きませんでしたが、「観測データから関係性を予測する」ということに可能性は感じていたかもしれません。

そしてこの時の経験が、意外にも私のキャリアに大きな影響をもたらしていくことになります。

新卒入社したSI企業での仕事

IoTって今後くるんじゃね?

就職活動。最初はITに限らず広く見ていた私でしたが、ふと企業研究をしてる時に見つけたKOMATSUさんのKOMTRAX*3による、「データとITにより製造業のビジネスを変えた」という事例を見て直感します。「あれ、これ次くるやつじゃね?」と。

ITによって、データがどこからでも取れる。取れるなら、今後はデータに大きな価値を見出すようになると。

人類誰しも、「データによる隠れた価値の発見」とか言われると心奪われません?*4
気づけば私は単純思考で、「ITと製造業両方強い会社に行けばいいじゃん」とメーカ系SI企業の扉を叩いたわけです。

データサイエンスの仕事が舞い込む

不思議なもので、データやらIoTやらの熱い想いを社内で言いふらしていると、ちゃんとその仕事を割り当ててくれるんですよね。SIerはPM育成至上主義になりがちな中で、訳わからん夢見がちな新人に経験を積ませてくれる、とてもいい会社だったと思います。ほんとに懐の深い企業や上司に恵まれたと思います。

新卒入社した企業でこんな仕事をしました。

  • IoTを利用した機器ライフサイクル管理システムの開発
  • 自動車会社のディーラDWHの活用企画・開発
  • 昇降機管理会社の契約分析
  • 化学系企業の工場データ可視化
  • 鉄道会社の車両保守データ分析
  • コンクリート壁面画像AI保守 などなど…

挙げればまだまだキリがないですが、機械学習に限らずDWH構築やBIによる可視化が経験できたこと、コングロマリッド企業ゆえの幅広いデータを知ることができたのは非常に有益でした。

データサイエンティストという肩書に

最初はSEという立場で入社した私ですが、自社グループの大規模なデータ分析プロジェクトに配属された後、組織を変えてでも「データ活用の市場で生きていこう」と決心しました。

「データを扱うのは直感通りこれから大きな強みになる、何よりもSEのPM仕事には上が沢山いるけど、データサイエンスなら上は数えるほどしかいないぞ!」と。*5

気づけば自分で参考書を買い漁り、GPUのPCを自費導入し、仕事だろうが休みだろうが隙あらば深夜まで勉強し、没頭していきました。社内で多くのプロジェクトを経験し、学んだ参考書は今では200冊近くに上り*6、社内で当時15人程度しかいなかったデータサイエンティストの最高資格を取得するまでになっていました。

やがてデータサイエンティストのチームを結成とかして、自分で採用活動もしながら社内の案件を拾っていくことに。*7

データプラットフォーム、クラウドの重要性の理解

順調そうに見える中で、ところがどっこい。
そんなにきれいなデータサイエンス案件などそうそう転がってない。SI売上とデータ分析が微妙にマッチしないという苦難も相まって、なかなかいい仕事に恵まれませんでした。仕事をチームに供給しなければならない立場の私としては、データと名の付く仕事はなんでも取り組みました。しっかりした仕事を取らないと自分もスキルアップできない、チームメンバも辞めてしまうと脂汗をかきながら必死に色んなところに行脚しました。

結果的にこんなプロジェクトを経験します。

多くのプロジェクトをクラウドネイティブに取り組みました。もともとオンプレDWHの案件で非常に苦労していたこともあり、ITインフラの常識を根本から覆すクラウドの威力、そしてデータプラットフォームの需要の高さと技術要素の複雑さをかなり理解するようになりました。
特にクラウド技術はIT業界の勢力図にパラダイムシフトを起こし、次の時代はクラウドを軸に世界が回り始めるという確信を持ちます。

そして、こうも思うわけです。

クラウド、データプラットフォーム、データサイエンス分かる人ってめっちゃ必要なのに全然人いなくね…?」

脂汗大量発生のさなか、「データと名がつけば何でもお任せあれ」の便利屋さんで培った経験は、実はとても大事なことだったんじゃないかと気づき始めました…。

Data & AI Cloud Solution Architectへ

というわけで、だいぶ省略しましたが現在の仕事に至ります。

新卒入社した会社には非常に感謝してますので、退職するに至った経緯と良かったところなどは追い追い書くかも知れません。*9

現在は、プロフィールにもあるように外資系IT企業でData & AI Cloud Solution Architectの仕事をしています。

AIに限らずSparkやDWH系のビッグデータプラットフォームに関わる分野にも携わっていますね。データサイエンスに魅せられ走ってきましたが、現在はデータを何とか活用しようと試行錯誤するお客様に、持ちうるすべての経験と技術でバックアップできるよう日々がんばっております。

データと関わるということ

こうして、データ活用の可能性に心奪われ社会人生活の大半を過ごしてきた私自身、実はデータ解析やAIに元から興味があったわけではありません。むしろ数学は苦手*10だったし、確率は更に苦手だったし、でもデータをきちんと解釈することがどんな意味を持つのか、今では分かるような気がしています。



データというのは、記録なんですね。過去であり、人の歴史そのものなんですよね。

記録や歴史から学び、それが正しいのか研究して証明することは、実はデータ社会の以前から人間は少しずつ進めてきたんです。1件1件時間はかかったけれど。だからデータサイエンスなんていう壮大な名前こそついているものの、やっていること・やりたいことは今までの人の営みとそう齟齬はないんです。むしろ本来だったらすべてのことをきちんと事実に基づいて判断・検証すべきだったのに、今までは検証サイクルの遅さから出来なかったことを、ようやく技術の発展でできるようになっただけのこと。
だとするなら、すべての企業や組織にとって、データを収集し意思決定に使用できるれば、無駄な失敗が減り、きちんと先人たちの経験を生かすことができるはずです。

そしたらわれわれ人間は、もっと豊かに幸せになっていくことも可能で、そのための助力に少しでもなれれば嬉しいなと思って日々仕事しています。

このブログも、そんな志を共にする仲間を増やして、躓いたときに少しでも早く立ち上がれるよう、意味のあるものにしていければと思っています。

散々壮大なこと書いて、執筆時点ではまだ記事ほとんど無いんですが。笑
どんどん増やしていきたいと思いますので、困ったときにたまに見に来ていただければ幸いです。

最後に

みなさまどうだったでしょうか?
壺は買いたくなったでしょうか?
こんな感じでちょっと適当な感じですが、楽しみながらデータに関することを発信できればと思っています。

改善点や要望があれば、どんどんご指摘いただければと思います!

*1:エンターテイナーにとってデータドリブンな意思決定に携わることは拷問らしいです。

*2:ブログが軌道に乗れば色んなところから技術書とか寄贈してもらえないかなくらいの下心はありますが

*3:参考:https://ix-careercompass.jp/article/28/ IoT事例の走りですね

*4:現実そんなことは滅多に起こらないと知るのはまだ先のおはなし

*5:上しか見てなかったですが、逆に若い世代に追われる立場になってヒイヒイいうことになるのも、まだ先のおはなし…

*6:いくらつぎ込んだかは妻には今でも言ってない

*7:データサイエンスチームを運営するときの苦労話はまたいつか…

*8:何でこれをやることになったのかも、またいつか…

*9:でも、散々好きにやらせてもらって最終的に出てきてしまったことには未だに申し訳なさはありますが…

*10:高3夏の河合模試の数学の偏差値は49です

時系列解析に散った子羊たちへの鎮魂歌

2つのブログを初投稿させていただいてから早いもので数週間。

自己紹介 - AIソリューションアーキテクトのおしゃべり
データ活用人材とはどんな人々か - AIソリューションアーキテクトのおしゃべり

思っていた以上に反響があり、

「面白くて、あっという間に読めた」
「ブログとリアルのキャラが一致しなくて困惑した」
「怪しい壺が買いたくなった」*1

など、数々のご好評をいただきまして非常に感謝してます。

時系列解析って何か色々あってわかりません!(憤怒)

さて、本日取り上げたいのは時系列解析。
最近では新型コロナウイルスの感染者数という大々的に報じられる時系列データがあるのでイメージしやすくなったかもしれませんが、手法自体を学んでみると何だか色んな名前が飛び交っていて訳が分からない人も多いのでは。

時系列予測の手法1つとっても

という巷の意見が初学者を惑わせているのではないでしょうか。

一体どれをどういうときにどうやって使うんですか!と憤怒*3する人、すなわちフンダーさんやフンヌーさんが続出するのもこの界隈の特徴。今日はそんなフンダーフンヌーのため、時系列解析っていつどうやって使って何で勉強したらいいか、私の経験に基づいて簡単に意見を書いていこうかと思います。

本ブログでは学術界の偉大な先生方が書いた書籍を超えることなど到底できないので、解説自体は簡単なイメージ把握に留め*4、私が愛してやまない参考書たちを惜しみなく紹介していきます。

1点!気を付けたいのは、本記事は初学者も対象としており噛み砕いた説明が入っており、一部に独自定義した名称などが入ります。注釈に書いておくようにしますが、ご注意ください。

それではまいりましょう!

時系列解析で扱われるデータ

まず何のデータを扱うのかってところからです。混乱を生む元になってるのって、「時系列データ」という言葉に暗黙的な色んな種類があるからだと思うんですね。
「時系列データ分析って書いてある本買ったのに自然言語処理の話が始まったぞ!返品だ返品だ!」
と激怒の淵へ落ちたフンダーのみなさん。落ち着いてください。実は巷で「時系列データ」が語られる際、以下の3つの意味が混在していることがあります。ややこしいんだこれが。 本ブログではその3つをまず紹介していきます。

学術的に言えば、これらデータに本質的な違いがあるわけではないですが、我々がデータを取り扱い識別する上では性質が明らかに異なります。本ブログでは一旦この分類で理解していきましょう。

↓で詳しく見ていきます。

定期記録データ

先ほども例に出した新型コロナウィルスの新規感染者数や株価など、日次・週次・月次など定期的に記録していくデータです。ぶっちゃけ名称が良く分からないので「定期記録データ」としましたが、信号データや自然言語以外の時系列データはここに分類されるイメージで捉えていただければ。逆に言えば、定期記録データが一般の時系列データで、信号データや自然言語データは時系列データの特殊なパターンと考えても差し支えません。以下、本ブログでは以後この一般的な時系列データを簡単に「記録データ」と呼んでいきます。

信号データ

音声波形、電流、温度など、昨今はIoTの文脈などでセンサなどから引き上げられてくるデータがこれにあたります。基本的には生データに近い低レベル情報というイメージですね。厳密には信号データも記録データの一種と言えるのですが、実態として検討される分析手法は結構違ったりするので、分類を変えています。 例えば、記録データと比べて信号データは外生変数が影響を及ぼすようなことも多くないため、予測値を出すことにはさほど意味がなく、むしろ周波数の解析など信号そのものの性質を知るほうが信号データには有効な解析だったりもします。そのため記録データにはあまり用いられないような、フーリエ変換などの手法を適用して解析を進める場合があります。

自然言語データ

これがあるからややこしいんですが、自然言語もデータ分析の文脈では時系列データの一種として扱うことができます。自然言語処理の文脈では、例えば「I have a pen.」はIとhaveとaとpenが連続した別のデータで連なっていると解釈できます。 ↓の表のように、記録データや信号データのように時系列データに置き換えて処理をすることで解析が可能なんですね。

と、自然言語データが時系列データに一応該当する旨は述べたものの、実際には自然言語を処理する場合は、記録データや信号データで用いられる自己回帰モデルや状態空間モデルなどの予測手法はほぼ使いません。最近ではニューラルネットワークによる解析が大半を占めています。

しかしながら逆に、自然言語の解析として急速に発展したニューラルネットワークの手法が信号データや記録データに適用されることは増えてるんですね。これがまた理解を煩雑にしているところがあるかと思います。

時系列データの種類まとめ

ごちゃごちゃ書きましたが、下にざっくり纏めておきます。

時系列データまとめ
どうだったでしょうか。 これが「時系列データ分析って書いてある本買ったのに自然言語処理の話が始まったぞ!」のフンダー達の叫びの正体だったわけです。

時系列解析の種類やおすすめ参考書籍

さあフンダーの叫びを解明したところで、先出しでちらほら出てきていた解析手法についても纏めていきましょう。扱うデータは分かった。では時系列解析とは具体的に何をすることなのでしょうか。

↓で概要を見てしていきましょう。

1. 記録データ・信号データに使われる予測モデル

コロナウイルスの感染者数で言えば、明日の感染者数は何人?という予測を誰でも考えたことがあると思います。データから学習して予測を返すモデルを挙げていきましょう。モデルによっては単に予測値を返すだけでなく、上昇トレンドや季節性などの成分に分解することで、本質的に感染者が増えてきているのかどうかを判断できたりします。

1-1. ARIMA系*6モデル

時系列予測における最もベーシックなモデルです。記録データ、信号データのどちらにも使います。*7
ARIMAとはそもそも何かというと、ベースとして下記のような要素を持つ予測モデルです。

  • 時刻  t における予測値  y _ {t} は、  y _ {t-1} を使って表現できる*8(AR - Auto Regressive)
  • 予測値はそれまでの移動平均を使って表現できる(MA - Moving Average))

このカッコ()の中身をどこまで関係式に組み込むかでモデルの名前が決まるんですね。ARモデル、MAモデル、ARMAモデルといったように。

ちなみにARIMAのIが入るとどうなるかというと、I- Integrated、つまり差分( y _ {t} y _ {t-1}の差)を予測対象とするモデルになります。前回予測値からの増減分を予測対象とするモデルの場合にはIが入りARIMAモデルということになります。*9

日本語で書けばARIMAは自己回帰和分移動平均モデル。なが!
これに季節性を取り込むとSARIMAモデルとなったり、派生形が色々存在します。

ちょっと抽象的なのでコロナウイルス感染者数の例を使って言い換えると、↓みたいな感じですね。

  • 感染者が昨日より今日のほうが多い。明日はもっと増えるだろうな。(AR)
  • ここ数週7日の感染者数の平均が上昇傾向だし、来週も基本的には感染者数が増えるだろうな。(MA)

皆さんもこういう仮説は感覚的に持っているのではないでしょうか。それを明示的に式に組み込んだと言えます。
参考までに、最も単純なARモデルの例を式で示しておきましょう。

 \displaystyle y_{t} = a_{0} + a_{1}y_{t-1} + \epsilon_{t}   \qquad \epsilon_{t}   ∼ N(0, \sigma_{t})



単純ですね。一期前のデータ  y _ {t-1} が定数倍(  a _ {1} )され、正規分布に基づく誤差  \epsilon _ {t} と定数項  a _ {0} が載って次の予測値  y _ {t} が出ると。
 a _ {0},  a _ {1},  \sigma _ {t} などのパラメータを観測データを使って推定することになります。

このARIMA系モデル、Rなどでの実装は比較的簡単で、解釈しやすく初心者にも扱いやすいモデルと言えます。しかしながら実務においてバンバン適用できるかと言えば、実は結構重大な問題があります。それは「データに弱定常性*10を前提としている」こと。上の式で言うなら、例えば推定した  a _ {1} などパラメータの値が経時で変わらないといった性質を求めています。

これはかなり強い仮定になるので、使うタイミングが結構限られてしまいます。コロナウイルスの感染者のように、例えば新しい株が発生したり、感染者が増えてきて集団免疫ができてきたりすることで、パラメータが変動してしまうことはざらにあります。 こと記録データに使用する際は、性質が変わりにくいデータや短期的な予測としての適用の意味合いが強くなります。

おすすめの書籍
gihyo.jp

AR、MAを中心に扱ったかなり初学者向けの内容になります。金融データを扱っていることからも、文系学部出身の方が読むことも想定されているのでは。扱う範囲は広くないのですが、数式も少なく説明も丁寧で、Rによるコードも併記されてますのであまり数学に自信が無い場合にはここから入ると良いと思います。ARMAやGARCHモデルでの実験がメインで、ARIMAそのものは出てこないものの、時系列分析の最もベーシックな考え方が直観的に理解できます。



www.hanmoto.com

通称隼本。状態空間モデルと銘打ってますが、5章くらいまでARIMA系モデルを解説してくれていて、しかもわかりやすいです。「迷う人は取り敢えずこの本読んでみ」と雑に言えるくらい対象読者が広い本と言えますね。大学1年生で習うような数学を何となく覚えている人であればこの本からでも良いでしょう。1冊でARIMA系と状態空間モデルの両方が理解できるので非常におすすめです。数式による説明も最低限度に留められており、初学者でも解釈しやすいように随所で工夫されています。読み終わったら著者の馬場さんの他の書籍検索して全部買いたくなるので注意して読んでください。

1-2. 状態空間モデル

ARIMA系モデルは先ほどの説明にも出てきたように、時系列の弱定常性を仮定しています。実際には時系列の性質は時々刻々と変化しているケースが多く、ARIMA系モデルでは解決できない場合も多いです。そんな時にも使える中級者以上向けの時系列分析とでも言いましょうか。それが状態空間モデルになります。 状態空間モデルはベイジアンな手法で、「状態」という観測されない潜在変数を用いて時系列の挙動を表現していくモデルです。

  • モデルの設定を柔軟にできる
  • 生成モデルのため欠損値処理を気にしなくていい
  • 経時で変化するパラメータが導入可能で、非定常データにも対応可能
  • 予測値だけでなく、予測値やパラメータの分布も求められ、解釈性が高い

といった便利な性質を持ちます。その代わり、やや求められる数学知識は高度で、いわゆる統計モデリング力も必要になるなど、扱う人の知識レベルは多少上がります。

さあそんな状態空間モデル、一体どんな考え方なのでしょうか。
状態空間モデルでは時系列の挙動に合わせ、「状態方程式」なるものと、「観測方程式」なるものを設定します。 「いや、そんなこと言われてもどんなルールで設定すんの。」と思いますが、一般化すると求められていることは↓だけです。

観測方程式:   y _ {t}  ∼ p(y _ {t} | x _ {t})
(  t 時点の状態を示す値が  x _ {t} 、観測値が  y _ {t} )


え、これだけ?と思ったでしょう。そう、残念ながらほとんど自分で頑張るんです。*11
本ブログでは深くまでは追いませんが、ざっくり根幹となる考え方を書くとするなら

  • 「時刻  t での状態   x _ {t} 」は「時刻  t-1 での状態   x _ {t-1} 」によって確率的に変動
  • 「時刻  t での観測値   y _ {t} 」は「時刻  t での状態   x _ {t} 」によって確率的に変動

というルールの下で観測方程式と状態方程式を設定しろと言ってるだけなんですね。しかもベイジアンな手法なので、パラメータの事前分布の設定含め変えられるという点を鑑みても、かなり柔軟な設定が可能ということです。ただ自由度が高いということは、裏を返せばそれだけデータサイエンティストの腕に委ねられる領域が大きいんですね。直観的な仮説をモデルに組み込めるというベイジアンならではの強みはあるものの、きちんと学ばずに使ってもほとんどその恩恵が得られないので、どのように学んでいくかは非常に大事なところです。



おすすめの書籍

www.hanmoto.com

状態空間モデルを学ぶ上では、まずARIMA系でも挙げた隼本が筆頭になります。状態空間モデルでは観測値の誤差によって、予測していた状態を更新するという処理をフィルタリングと呼ぶのですが、本書ではそのベーシックな手法であるカルマンフィルタを使った解説をかなり丁寧に書いています。これで厳しいようであれば状態空間モデルの利用は諦めたほうがいいかもしれません…。RとStanでの実装も豊富に扱われており、具体例ベースの実装方法も書かれているので、まず基本的な部分はこれを読んでおけば問題ないでしょう。


www.kspub.co.jp もう一冊がこちら。カルマンフィルタがフィルタリングのベーシックな手法と書きましたが、更にモデルに柔軟性を持たせるためには粒子フィルタ*12を使ったモデルが必要になります。元々状態空間モデルはベイジアンな手法であることに加えて、解説しようと思うと非常に難しいものになるのですが、それを真正面から丁寧に追った書籍になります。勉強し始めの際、粒子フィルタを理解しようと私は散々ネットを彷徨い、夢やぶれ泣き濡れましたが、唯一分かりやすかったのがネット上の樋口先生の解説でした。「樋口先生、状態空間モデルの書籍書いてないの?むしろ書いててくれえ…!!」と探したら、タイトルからは状態空間モデルを全然想起できない(失礼)こちらの第1版を見つけました。恐る恐る開いてみたら私の悩みは吹き飛び脳汁ドバドバ。粒子フィルタの理論をここまで詳しく解説されていて、平易に書かれている書籍はほとんど無いのではないでしょうか。

藁にすがる思いで手にした本書籍、とても助かったのでTwitterで勝手に興奮してたらあまりにうるさかったのか、それを見た講談社サイエンティフィク様(https://twitter.com/kspub_ls)から第2版をご寄贈いただきました。テンションの上がった私は気合を入れてレビューを書くどころか、時系列解析のまとめ記事を書き始め、うっかり大長編になり激しく後悔し現在に至ります。

第2版は状態空間モデル以外に散在する時系列分析の手法概説を加え、オールカラー化して更に分かりやすくなっています。地味に1章の導入も時系列分析の基礎として勉強になるんですよね…。
というわけでみんな、買ってくれよな!


gihyo.jp とにかく上に挙げた手法たちのR実装サンプルを見たい!という方はこちら。粒子フィルタまでのコードサンプルが非常に充実しています。一応理論の解説も触れられていて、前半は非常に分かりやすく展開されています。後半は初学者というより、一度理論を理解した人が見返すとコードと合わせ非常に良い頭の整理になりますので、時系列分析を1周学んだうえで手元に持っておく1冊として良いと思います。


www.kyoritsu-pub.co.jp 個人的にベイジアンな手法はRとStanの組み合わせが扱いやすい印象ですが、昨今ではシステム化のためPythonで実装しなければならないケースもあるでしょう。その要望に応えてくれるのがこちらの書籍。こちらも粒子フィルタまでのPython実装コードが満載です。異常検知まで扱ってくれているので時系列解析×Pythonというケースでは持っておいて損はないでしょう。

1-3. ニューラルネットワークモデル

ニューラルネットワークでも時系列データを扱えるモデルが幾つか存在します。リカレントニューラルネットワーク、LSTM、Transformer系のモデルなど元々は自然言語処理用に発展してきたものではありますが、記録データや信号データの予測として用いられるケースもあります。昨今ではTransformer系がKaggleのコンペティションでも猛威を振るっているみたいですね。十分なデータ量が揃っていればパターン認識の精度は高いこともありますが、非定常過程には思うような結果が得られないケースもあるので一概にすべてのケースで高精度とは言えないようです。また状態空間モデルなどに比べモデルの解釈性が落ちたり、学習にはGPUマシンが必要になり学習時間も要するので注意が必要です。

解釈性という観点では、例えばコロナウイルスの感染者予測1つとっても、重要なのは予測が当たることばかりではありません。例えば病院経営においては、中長期的な感染者数のトレンドのほうが気になることもあるでしょう。我々のような一般市民も、単なる感染者数だけでなく曜日ごとの傾向を捉えて一喜一憂しないようにしてるのではないでしょうか。 下記の機械学習手法を用いた回帰モデルも含め非常に高精度なモデルですが、タスクが果たして予測だけを求めているのか、そうでないのかはモデル選択の上で特に重要ですので、要件をきちんと把握し安易に精度の良いだけのモデルを選ばないように気をつけてください。

おすすめの書籍

www.oreilly.co.jp 何といってもニューラルネットワーク系はこのシリーズから入るべきです。出版が少し前になるのでTransformer系は扱われていませんが、それでもニューラルネットワークの時系列データ(自然言語がメインですが)を把握する上で本書を超えるものは無いでしょう。 何ならシリーズの①から読みましょう。 分かりやすすぎて「はわわわわ」となって泡を吹くことこの上なしです。コードについてはその名の通り独自実装になるので、本書を読み終わったらPytorchやTensorflowのライブラリの使い方を覚えていくと良いと思います。私はPytorchやTensorflowの実装は黎明期に別ルートで覚えることになったので書籍等は使っていませんが、ニューラルネットワーク自然言語処理系を扱う書籍や下記は参考になると思われます。

詳解ディープラーニング 第2版 | マイナビブックス

物体・画像認識と時系列データ処理入門 [TensorFlow2/PyTorch対応第2版] NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング - 秀和システム あなたの学びをサポート!

また、自然言語処理のプロの実装を知りたい方は自然言語系のKaggleコンペのNotebookから学ぶ手もありでしょう。例えば少し前にCommonLit Readability Prizeという文章データから読みやすさを定量評価するコンペティションが開催されました。 私のような雑魚でなく、つよつよデータサイエンティストによるBERT、RoBERTaなど最新の手法の実装が多く公開されていますので、関連ライブラリの扱い方を確認するのも良いでしょう。
CommonLit Readability Prize | Kaggle



1-4. GBDTなど機械学習手法を用いた回帰モデル

上記のほか、いわゆる時系列分析手法とは呼ばれていない、機械学習を用いた回帰モデルでも予測をしたりします。主にコンペティションなどではよく使われ、説明変数にラグ特徴量(過去の目的変数の値)や外生変数などを用います。GBDT系やニューラルネットワークの回帰モデルを使うことで、比較的簡単に高精度な予測が可能となる場合があります。こちらも高精度予測ではありますが、モデルのトレンド成分など解釈性については状態空間モデル等に比べると乏しいので、タスクの目的に応じて使い分けると良いでしょう。 また、回帰モデルとしてガウス過程回帰を使って予測をすることもあります。ガウス過程回帰モデルは比較的精度の高い予測結果を期待できながらも、ベイジアンな手法なので予測値のほか予測分布まで算出できます。意思決定を伴う予測をしたい場合には候補として挙がることが多いです。やや計算コストが高いのと、理論を理解していても結構カーネルの設定で迷うので扱いは難しいですが、強力な手法であることは間違いありません。

おすすめの書籍
gihyo.jp 各所で大絶賛の名著ですので私が今更紹介するまでもありませんね。本書の3.10には時系列データに対する特徴量エンジニアリングなどが扱われています。時系列データの取り扱いに限らず、あらゆる予測タスクのTipsが載っているバイブルです。データ分析を学ぶ方は手元に持っておくことをおすすめします。

本書の他、Kaggleの時系列系のコンペティションの解法を調べることも有効です。大抵のコンペは参加者の方が上位解法を纏めてくれていたりするので、自分が取り組む際にはチェックしておくと非常に勉強になります。


www.kspub.co.jp ガウス過程回帰を勉強したい方はこちらの書籍がおすすめです。あまり解説書籍が存在しなかったガウス過程ですが、この書籍の登場でだいぶ助けられました。ロマンありますよねガウス過程。ガウス過程の中で用いるカーネル法などが割と難しい概念になるので、初学者がきちんと理解できるようになるべく平易に記載してくれています。本書を読み終わって、もっと…もっとガウス過程のすべてを知りたい…と思った方は下記の書籍たちに足を突っ込んでみてください。責任は取りません。

カーネル多変量解析 - 岩波書店

ベイズ深層学習 | 書籍情報 | 株式会社 講談社サイエンティフィク

カーネル全然分からねーじゃねーか!とブチ切れ寸前になった方は下の書籍のSVMの解説あたりでも分かりやすく扱われています。 多変量解析入門 - 岩波書店

カーネルの挙動を視覚的に理解したい方はこんなサイトもおすすめ。 Jochen Görtler



2. 記録データ・信号データに使われる異常検知・変化検知モデル

異常検知については、ここで語り切るにはちょっと奥が深すぎるので、というか語る気なかったんですが成り行きで作ることになったので、概要とおすすめ書籍くらいにさせてもらおうと思います。この他、変化検知の手法なども含めて概要を記載します。

2-1. 特異スペクトル変換(変化検知)

時系列データの最大特異値を用いて変化度を算出し、それに基づいて性質が変化したタイミングを判断する手法を特異スペクトル変換と呼びます。正常・異常を区別する異常検知とは異なり、あくまで変化度を検出する手法ですので、変化検知もしくは変化点検知などと呼ばれます。特異値分解は計算コストがやや大きいものの、機械学習の世界では自然言語処理のEmbedding、テーブルデータの次元削減、劣決定性問題の解の安定化など色んな場面で用いられます。変化点検知に限らず特異値分解について知ることも個人的には結構重要かなーと思いますね。あとで紹介しますが、「入門 機械学習による異常検知」には特異値分解も詳しく扱ってます。

2-2. 予測モデルを用いた異常検知

こちらは1.で紹介した予測モデルの予測値を元にして異常検知する方法です。考え方は比較的シンプルな手法で、「予測値からどれくらい離れるか」を定量的に判断し閾値を超えた段階で異常とします。ただ「どれくらい離れるか」を定義することは、予測値の背後にある分布をどう考えるかに直結するので、そこは注意が必要です。ARIMA系など予測値が1点で求まる手法は正規性を仮定してみたり、訓練データの分位点を考えて異常度を算出します。状態空間モデルやガウス過程回帰などのベイジアンな手法を用いれば予測は分布として出すことができますので、分布に従い閾値を設定できますね。

2-3. クラスタリング手法による異常検知

クラスタリング、言うなれば教師なし学習で正常・異常を分類する手法です。簡単に言えば、時系列データがどのクラスタに分類されるか都度判定し、正常クラスタに入らない場合に異常判定をする手法になります。教師ありの分類問題で異常検知をするケースもありますが、一般的には異常検知をする場合、正常データに対して異常データ数は圧倒的に少ないことがほとんどなので、クラスタリングをはじめとした教師なし学習のような、異常データを必要としない手法が用いられることが多いです。代表的なクラスタリング手法であるK-meansや混合正規分布によるクラスタリングなどが使われることもありますが、これらは事前にクラスタ数を指定する必要があるため、DBSCANなど事前にクラスタ数を指定しない手法が選択されることもあります。異常を分類するという手法ではクラスタリングに限らず隠れマルコフモデルを使ったり、適応共鳴理論を用いるケースもあるみたいで、決まりきったデファクトの手法はあまり聞かない印象です。私はあんま詳しくないのですが、知り合いが適応共鳴理論に関する参考になるブログを書いていたので貼っておきます。

適応共鳴理論(Adaptive Resonance Theory)の異常検知への適用 #Python - Qiita

2-4. 疎構造学習による異常検知

多次元の時系列データに対して使われる手法です。例えばグラフィカルlassoと呼ばれる手法は、時系列データ同士に相関関係がある場合に、定常時と異常時でデータ同士の関係性が崩れることを利用して異常を発見する方法になります。具体的には、データが多変量ガウス分布に従っているという仮定を置き、学習データから精度行列をスパース(疎な行列)に推定することで予測分布を得ます。異常時はデータ同士の関係(精度行列)が変化するはずで、この予測分布から外れるという考え方で異常を発見します。

おすすめの書籍
私の印象ですが、時系列データの異常検知については十分に書籍があるとは言えないと思っています。 予測モデルベースの異常検知はともかく、クラスタリングベースの異常検知手法やグラフィカルLassoなどを纏めて取り扱っている書籍が全然無い*13んですよね。なんでだろ。 異常検知の書籍でおすすめはありますので、ひとまずそれをご紹介しておきます。

www.coronasha.co.jp

200冊以上読んできたデータ分析系の書籍でも個人的にかなり上位のおすすめです。数式をがっつり使って異常検知をはじめから丁寧に解説しています。残念ながら異常検知系の書籍は初心者向けのものが少なく、本書籍も数学アレルギーの方にはやや厳しい側面もありますが、しっかりと式が追いやすいように行間が少なく記載されており、かつRのコードもありますので、比較的迷わず追うことができます。部分空間法の解説では、主成分分析を3つの角度から解説することで特異値分解との関係性を示しており、個人的には異常検知以外の部分でも大変勉強になりました。
これを読んでもうちょっと知りたい…となった方は同じく井手さんが著者の1人となっている下記にステップアップしてみるといいかもしれません。ちょっとこちらの方が難しめです。

異常検知と変化検知 | 書籍情報 | 株式会社 講談社サイエンティフィク

やはりワイはRでなくてPythonで書きたいんや…となった方はこちら。

Pythonによる異常検知 | Ohmsha



また、疎構造学習について気になった方はスパースモデリングに関する書籍を見てみるといいでしょう。簡易的ではありますが岩波データサイエンスのvol.5にグラフィカルLassoに関する解説が書かれています。

www.iwanami.co.jp

3. 信号データによく使われる解析手法

信号データについては、それ自体に予測の意味が無かったりするデータも多いです。例えば、製造現場における振動センサで機器の振動状態を見ていたとしても、振動波形の予測をしたいわけではなく、知りたいのは故障の有無だったりするわけです。その場合、先に紹介した異常検知や、信号そのものの周波数特性などを解析する方が重要だったりします。ということで、信号データの処理手法には独自のものが結構存在します。本記事では全部は扱いませんが、特に機械学習の文脈でも良く取り上げられる手法を紹介しておきます。雑な解説ですがすみません。

3-1. フーリエ変換

フーリエ変換は周波数解析の手法になります。機械学習の分野だけでなく信号や波形データを扱う際には本当によく使われる手法です。私も学部・修士で大変お世話になりました。実はエクセルでもできちゃったりするんですよね。
簡単に言えば、「正弦波・余弦波があればどんな波形でも近似できんじゃね?」という無邪気な想いに答えてくれる変換方法です。信号データをインプットにしてフーリエ変換すると、各周波数に対する振幅スペクトルが得られます。どの周波数でスペクトルが大きくなっているかで、信号データにどんな周波数の波(正弦波・余弦波)が含まれているか推定するんですね。時系列データにおいては、周波数成分が特定できることで、信号データのノイズを取り除くことができたり、機械学習に入る前に信号の性質を理解できるわけです。うれしい。
ただし、正弦波・余弦波が前提になる以上、定常性のある波形データしか表現できないという限界があります。性質が経時変化するデータには注意が必要です。ちなみに信号データのような離散データを扱う場合は厳密には離散フーリエ変換を使います。

3-2. ウェーブレット変換

ウェーブレット変換も目的はフーリエ変換に通ずるところがありますが、こちらは非定常データにも対応が可能です。フーリエ変換が「正弦波を使って信号を表現」しているという前提に立って使う手法でしたが、ウェーブレット変換は「ウェーブレット関数(マザーウェーブレット)で信号を表現」するイメージです。ウェーブレット関数には色々な種類があり、それぞれスケールが可変です。要は「伸び縮みできるいい感じの波を用意して、いっぱい足し合わせたらどんな信号でも表現できるんじゃね?」という、無邪気オブ無邪気な発想*14です。信号データをインプットに、それぞれの時刻においてどのスケールのウェーブレットが強く影響してるかを出してくれます。
上記はざっくりしたイメージでしたが、ウェーブレット変換にも連続・離散のそれぞれの手法があり、詳しく知りたい方は下記が参考になります。

連続および離散ウェーブレット変換 - MATLAB & Simulink - MathWorks 日本

3-3. 独立成分分析

音声データなどにありがちですが、信号に複数の音声が混ざっているケースがあります。人間の場合は2人が喋っていても、それを別の音声と認識することが可能です。無意識に信号を分離できているんですね。信号データからそのように独立したデータを分離する手法に独立成分分析などがあります。近年では統計的因果探索の文脈でも用いられるなど、使う頻度は多くないですがデータサイエンス界隈ではたまに登場します。

3-4. メルスペクトログラムへの変換

音声データを周波数が人間の知覚に近い「メル尺度」をベースに、時間軸、周波数、パワーに変換します。音声分類タスクにおいては、メルスペクトログラムを画像化しCNNにブチ込むという流れが確立されており、Kaggle界隈では猛威を振るっているようです。

おすすめの書籍

www.morikita.co.jp 信号解析を最初に学ぶ1冊目はこちらがおすすめです。フーリエ変換、特異スペクトル解析、ウェーブレット変換などについて網羅的で、1冊手元にあると安心できる書籍です。

先に解説した独立成分分析については、取り上げてみたものののあまり初心者向けとは言えない書籍が多いですね…。発展的な内容なので、本気で学びたい段階になってから手を付ける形でもいいかもしれません。先に紹介したように統計的因果探索の文脈でも用いられるため、因果探索の勉強と共に学ぶ手もあります。参考書籍は下記になります。

統計的因果探索 | 書籍情報 | 株式会社 講談社サイエンティフィク

Pythonで学ぶ音源分離(機械学習実践シリーズ) - インプレスブックス

入門 独立成分分析 - 東京電機大学出版局 科学技術と教育を出版からサポートする



ということで長くなりましたが、時系列手法や書籍の紹介はここまで!

自然言語はここから書こうとすると更に倍くらいの分量あっても足りないので、時系列特集では扱いません! 疲れましたすみませんでした。

最後に~最近の時系列データ処理の動向

いかがだったでしょうか。私は吐くほど長くなって本当にしんどかったです。
時系列分析も、予測の分野においてはニューラルネットワークの発展、今回紹介していないProphet、AutoML界隈でも時系列分析が可能になっている製品もあり、どんどん手軽な高精度の手法が出てきています。しかしながら途中紹介したように、本当に自分がやりたいタスクが予測のようで予測ではないというケースは意外にも多かったりします。目的をきちんと整理した後、じゃあいざ分析をしたいときに、手軽な自動予測しか知識の引き出しが無いと大変苦労しますので、すべてを深く学ばないにしても、体系的に理解しておくことは非常に重要かと思います。

今回も長かったですね。見込みの甘さで自らの首を絞めています。

次こそはライトな話題を扱いたいです。 ワインとAIについて語ろうかなと思います!

乞うご期待!

*1:参考: https://hiro-gamo.hatenablog.com/entry/2022/08/19/155707

*2:なんのネタか分からない人は新宿あたりを1日歩きましょう

*3:ふんど・ふんぬ

*4:メンタル弱いので間違ってたら優しく教えてください

*5:独自名称です。正しい名称あったら教えてください

*6:自己回帰型とも。自己回帰(AR)に限らないので敢えて本ブログではこういう書き方してます。

*7:信号データに用いる場合は予測が目的になるケースはそこまで多くなく、異常検知としての活用や信号の性質の解釈の意味合いが強いです。

*8:t-2でもt-3でも設定は自由ですが

*9:正確には日本語訳は差分でなく和分らしいですが

*10:ざっくり言えば、データの統計的性質が経時変化しないこと。

*11:典型的な予測パターンなら書籍見ればいくらでも載ってますけど

*12:パーティクルフィルタとも

*13:知ってたら教えてください

*14:怒られそう

データ活用人材とはどんな人々か

どうも、データと名の付くやつらはみんな友達。
Hirosato Gamoです。

誰だこいつと思ったら下記の自己紹介をどうぞ。
自己紹介 - AIソリューションアーキテクトのおしゃべり

ブログを始める以前からこれは絶対書きたいと思っていた記事です。 「〇〇社、デジタル人材を拡大!」なんてニュースが飛び交うようになって久しいですが、 みなさんこんな募集要項は見たことないでしょうか*1

データサイエンティスト募集要項

<応募資格/応募条件>
■要件
(1)経験:
・データサイエンス分野におけるビジネス価値を創造した経験
・マーケティング実務の知見
・関係各所との調整能力、技術を分かりやすく伝えるプレゼンスキル
・R,Python,Juliaを用いた機械学習、統計解析の幅広い知見
・ベイズモデリングに関する深い知見
・パブリッククラウドでのITシステムの開発経験
・DWH、ETLツールを用いたデータ加工・集計の技術
・IoTなどストリーミングデータの処理
・Sparkによる分散処理の開発
・SQLを用いたデータ抽出、RDBに関する知見
・BIツールを用いたダッシュボード作成
・機械学習コンペティションでの入賞経験
・MLOpsに関する知見および実際の機械学習システムの運用経験
・分散機械学習の実装

(2)資格:
・統計検定一級
・Python技術者認定
・IoT技術者認定
・AWSもしくはAzureの認定資格

(3)語学:
TOEIC900点以上もしくはビジネスレベルの英語力

一体お前らは何の職種を作ろうとしてるんだ。
データ救世主か。Data Savor的な新職種か。

隙が無い布陣。
史上最強打線*2

もちろん、私の創作なのでここまで酷い募集要綱は無い*3と思いますが、 データサイエンティストに何をしてもらいたいのか、それは果たしてデータサイエンティストがやる仕事なのか、この辺を整理できていない求人募集は未だ散見されます。

このまま仮に採用された人がいたとしても、「データサイエンティストとして来たのに、毎日ETLツールのお世話と周辺部署との調整ばっかやってる」みたいに半年で転職されて後任がいなくなり、属人化していたシステムが火を噴く訳です。これはお互いにとって非常に不幸な話だと思います。

もちろんそれを既定できていない企業側にも問題はあるんですが、人事って技術と違ってリファレンスがあまり無いので若干仕方ない部分もあり*4、実際現場でも最近まで職種と仕事内容に食い違いが生まれるケースも多いようです。

そして、求人情報がカオス状態が続いてしまうと、これからデータ活用人材が何を学んでいったら良いか分からなくなってしまう。 ということで、データと名の付く仕事を雑に振られまくってここまで来た私が、何となく今はこういうマップなんじゃね?というものを纏めてみました。

自社でデジタル人材の採用を強化しろと丸投げをされたりして日々疲弊している方、或いは自分がデジタル人材になったると思う方に是非とも参考にしていただければと思います。*5

書いてみたらやたら長文になりましたが、個人ブログのため校正は甘く私見を多く含みます。 参考程度にお楽しみください!

データ活用人材を定義

まずそもそもデータ活用市場ってなんやねんという突っ込みから入るかと思います。こちら、私が勝手に設定している言葉なので当然だと思います。

データ活用を、本ブログでは下記のように定義しましょう。

「業務オペレーションのためにデータを用いるのではなく、データを可視化・統計解析・機械学習のために利用する。」*6

ざっくりしてて怒られそうですが、ニュアンス伝わるでしょうか。

例えばECサイトにおいて、顧客データはまずオペレーション(画面上に顧客情報を表示したり、顧客情報から決算情報を紐づけて決算したり)に使用されます。一方で、業務を回すのとは関係なくマーケティング等で顧客の購買行動を追う目的で履歴を分析するためにデータを使用することもあります。

前者はビジネス・システムを回すためにデータ使用が不可欠ですが、後者のデータの使い方は業務上は必須ではない。このように、データを使う際は「オペレーション」と「活用」は明確に分けられています。実際、多くの企業では触るシステムも基本的には分けられていたりします。*7

この「活用」シーンにおけるシステムはデータ基盤と呼ばれています。

データ基盤のイメージ

ほんで、データ基盤には下記のような人材が関わるんですね。

  • データ基盤を使う人(データサイエンティスト、データアナリスト、リサーチャー)
  • データ基盤を開発・運用する人(データエンジニア)
  • データ基盤のデータから生まれた機械学習システムを開発・運用する人(機械学習エンジニア)

これらの人材を本ブログではデータ活用人材と定義し、筆者がデータ活用の現場に入り、時に苦しみ、泣き濡れ、果てしない闇の向こうに手を伸ばそうとした経験から、最近だとどんな役者が現れ、どんな技術を求められているか詳しく扱っていこうと思います。

ちなみに、単純にデータ基盤に関わる人材を知りたい場合にはデータ総研さんの出版した下記の書籍を参照いただくことをお勧めします。キャリア育成を主眼に置いたものではないですが、本ブログで扱わない細かい役割の人材まで記載されています。育成や採用の前に自社に必要な組織体制や全体感を把握したい場合に非常に有用だと思います。

jp.drinet.co.jp

データ活用人材の概要

前置きが長くなりましたが、 早速データ活用界隈にはどんな人材がいるのか まず簡単に表で見てみましょう。

# 役割 役割・概要
1 データアナリスト ・データに基づいてビジネスに紐づく仮説立案を進める。
エンジニアというよりはビジネス課題をデータ分析の文脈に落とし込む専門家の意味合いが強く、スキルセット的にも高度な機械学習技術より、BIによる可視化やプレゼンなどビジネスサイドへのコミュニケーションにも重きが置かれる。
2 データサイエンティスト ・ビジネスサイドが設定した仮説の統計的な検証
・予測分析のための精度の良い機械学習モデルの構築
よくこれらに加えビジネス力、エンジニアリング力を兼ね備えたスーパーマン的な人がモデルケースとして語られることが多かったが、最近の市場では分業化が進んでいる印象。ただ、ビジネスサイドやエンジニアサイドと会話をすることが多いので基本的な知識は求められる。
3 データエンジニア ・データ基盤の開発・運用
・ビジネスサイドから要求されたデータの抽出
(データ抽出専門の人材が用意されることもあるが兼任となるケースも多い)
4 機械学習エンジニア 機械学習システムの開発・運用
・MLモデルのライフサイクル管理
機械学習モデルの精度向上
(精度向上はデータサイエンティストが実施することも)
5 リサーチャー ・高度もしくは独自の機械学習・統計解析アルゴリズムの研究開発
基本的には自社のサービスやプロダクトへ組み込むための活動になり、新しい職種というよりは従来の研究・開発職となる。



彼らがデータ基盤上のどこにいるかというと、 こんな感じです。*8

データ基盤の基本構成とデータ人材の配置


もちろんこれは例に過ぎず、現場によってはBIやRDBの専門家が入ってアナリストを支援するケースなど分業化することはあると思います。初めからすべてのメンバを揃えられるわけではないので、足りてない場合は育成も含めて進めていくことがほとんどだと思います。
下記で各人材の細かいスキルやちょっとした小話を書いていきます。

データアナリストのスキルセットと小話

実は結構重要な立ち位置と思っているのがこのポジションです。 データ分析においては課題設定がかなり肝と言われていて、データサイエンティストの中には統計や機械学習の手法はバッチリでも課題づくりは難しいと思ってる方は少なくありません。実際、ビジネス課題と機械学習の目標設定が誤っていて「気づいたら違う分析やってるぞこれ…」みたいなことは結構あるんですね。
このあたりの苦難は下記の書籍結構扱われてたりもします。気になる方はぜひ。

gihyo.jp

入試問題を作るのが入試を解くのとは別のスキルであるように、本来はデータサイエンティストとアナリストは違ったスキルになります。*9ビジネス寄りにバリバリ活躍していきたい方や、キラキラなカッコいいイメージは実はこっちなのではと思う今日この頃。 実際求められるスキルも↓のような認識です。

  • コンサル相当のビジネス課題整理力、データサイエンス課題への落とし込み
  • データ活用の主要なユースケースに関する知見
  • 解析結果をビジネスサイドへ分かりやすく伝達するプレゼン技術
  • BIツールを使用したデータビジュアライゼーション力
  • 得たいデータを抽出できるSQLクエリの作成知識
  • 基礎的な統計解析・機械学習の知識(統計検定で言えば最低でも2級程度)

究極系はデータサイエンスに詳しくてSQLやBIくらいなら余裕で使えて簡単な統計解析ならRで出来ちゃうコンサルタント?と思うと、結構ハードルが高いですし、この手の役割はデータサイエンティストを巻き込んでマネジメントする立場にもなりそうなので、実はキャリア的にもブルーオーシャンになってくるのではと思います。 コンサルやSIerなど受託系の企業ではかなり重宝されるかと。

データサイエンティストのスキルセットと小話

最もセクシーな職業*10として一世を風靡し、この記事のきっかけにもなっているデータサイエンティスト。日本でも各所でデータサイエンティスト争奪戦なるものが始まり、彼らを雇うために給与体系の変更まで考える企業が出てきました。(本当に自社のビジネスに見合った給与を算出できているのかは不明ですが) この高給神話は、元々はWeb業界のマーケティングやゲーム業界から始まったものだと私は思っています。というのも、この業界は推薦システムや広告のコンバージョン率、UIの変更による効果検証など、データの取り扱いが売上やサービス利用に直結してしまうんですね。となると優秀なデータサイエンティストを高給をはたいてでも獲得することで、結果的にもっと大きなリターンを得ようとするのは自然な発想なわけです。

結果、この業界での争奪戦が始まり「なんかデータサイエンティストに高給払うのがスタンダードらしいぞ」と、なぜか色んな業界で値上げ合戦が始まった…と。まあデータサイエンティストは業界を跨げるので、市場価格的には吊り上がるのは正しいとは思うのですが、データを素早く取得して活用できる業界でない限り、その高給をペイできる効果を得られずどう扱っていいのか分からない企業も多かったのでは…。現在もこのジレンマは残っています。なので、高年収での募集があったとしても、それが業界的に維持でき、企業的にもデータ基盤を抱えてバリバリ分析需要が高まっているような状況なのかはよく調査したほうがいいと思います。

例えば製造業においてデータ活用を推進するためにデータサイエンティストを雇ってみたものの、実際に使えるデータがわずかで、できることと言えば工場内の一部設備の故障検知くらい…となったら「よく考えたらうちの会社でこんな金出す必要ねーや」となる可能性も十分あるわけです。

そんなデータサイエンティスト、ここで語り切れるほどではないですがスキルセットはざっくり下記のような認識。

  • 発展的な統計解析・機械学習に関する知識や実装経験(詳しくは別記事で)
  • Python,Rなど解析用のプログラム言語およびライブラリを用いた実装力
  • 各種解析手法の必要なデータ加工に関するTips
  • データビジュアライゼーション力
  • 基本的なITの知識
  • 得たいデータを抽出できるSQLクエリの作成知識
  • クラウドベンダのMLプラットフォームやmlflowはじめ実験管理ツールの使用
  • ソースコード管理ツール(Gitなど)の知識

データサイエンティストについては

  • 受託系か、自社データ分析か、プロダクト開発か
  • Kaggler寄りか、アナリスト寄りか
  • エンジニアリング能力、ビジネス知識はどこまで必要か
  • 文系未経験からジョブチェンジは可能か

などなど、Twitter上で定期的に嵐を呼ぶトピックが満載なので、近いうちに本ブログでも扱いたいと思います。データサイエンティストに求められるスキルセットも、書けばキリがないので別記事で紹介したいと思います!こうご期待!

データエンジニアのスキルセットと小話

データサイエンティストに比べると知名度的には若干地味めながら、今後需要が高まりそう。というのも、日米問わず企業は現在データ基盤の整備を急ピッチで進めています。ビジネスのデジタル化が進む以上、この流れは大企業を中心に更に加速するでしょう。私が市場を見渡す限り、ここの知識を持つ人はデータサイエンティスト以上に供給が間に合っていない印象があります。データエンジニアブームなるものも無かったですしね。*11 元々オンプレでビッグデータを処理するのが主流だった時代から、Hadoopはじめ分散処理技術、fluentd,Kafka,Flink等のOSSベース*12のストリーミングデータ処理など、それぞれ1冊書籍が書けてしまうレベルの重い話題が多かったのですが、クラウドベースが主流になりサーバレスアーキテクチャやDockerの知識まで求められる始末。 結局、思いつくだけでもちょっとエグいレベルの広範な知識が必要になります。しかもデータ基盤のデータ連携元はRDBやNoSQLなど多様なデータソースとなることも多いです。IoTデータまで連携されることもありますね…。このような技術素養的に求められることも多い一方、ビジネスサイドへのデータ抽出を兼任するケースも多く、データエンジニアの組織は大体の企業でかなり多忙だなあという印象を受けます。

データエンジニアのスキルセットは(若干広くとると)こんな感じ。

  • AWS、Azureはじめ主要クラウドのネットワーク・権限管理
  • ETLツールを使った開発(informatica,Talend,DataFactoryなど)
  • DWH製品(Redshift,Synapse,BigQuery,Snowflakeなど)の運用
  • SQLの文法やデータモデルに関する知識を駆使した設計
  • Sparkによる分散データ処理の開発
  • BIによるダッシュボード作成・運用
  • ストリーミングデータの処理やアプリケーションへの連携
  • サーバレスアーキテクチャの各種サービス(Lambda,Functionsほか)を駆使したデータ処理
  • データマネジメントツールの活用
  • CI/CDツールを使用した日々のデプロイ・運用
  • 機械学習・統計解析を使ったデータ分析の基本的な知識によるデータ利用方法の把握

ということで、沢山仕事があるデータエンジニアは当然1人では追い付かず、基本的には複数人のチームで構成されることになると思います*13。ビジネスサイドに売上貢献などの直接影響をもたらすわけではないので分かりやすい高給が出されるケースはあまり見ませんが、確実に需要が伸びていくので今後じわじわと市場価値も高騰していくのでは、と個人的には予想しています。独自技術が多いことから比較的、市場に人が多いレガシーな技術と微妙に合致しないので、若い人にとってもチャンスかも。

機械学習エンジニアのスキルセットと小話

さて、このポジション、定義が一人歩きしている人材だと思います。個人的には2つの派閥があると思っていて、1つはKagglerよろしく機械学習の精度向上を得意とし、機械学習の学習・推論コードをプロダクトレベルまで高めていくエンジニア。もう1つはいわゆる機械学習システムを構築するエンジニア。前者はソフト*14で後者はインフラと言ってもいいかもしれません。

前者はデータサイエンティストのスキルセットを別記事で纏める際に触れるとして、ここでは後者のインフラ系エンジニアに触れたいと思います。恐らく近いうちにMLOpsエンジニアとも呼称されるようになっていくのではないでしょうか。 機械学習システムについても詳しくは別記事で扱おうかと思いますが、基本的に下記の図のように学習環境と推論環境に大別されます。

機械学習システムの抽象イメージ


学習環境ではデータを機械学習アルゴリズムに食わせ、機械学習モデルを生成し、推論システムではデータのリクエストに対して推論結果を返します。例えば、画像に写っているのが犬なのか猫なのかを判定する機械学習モデルがあるとすると、推論システムではリクエストと共に画像を受け取り、それが犬か猫かを返します。一見、簡単そうなAPIシステムですが機械学習が絡むことによって面倒な部分が生じるんですね。

このように、学習および推論をスムーズに進行し、運用保守を回せるようになるために必要な人材が機械学習エンジニアなわけです。こちらもかつては機械学習が本番システムとして運用されるケース自体が市場に少なかったために注目されてこなかった役割ですが、パブリッククラウドベンダの各社が機械学習開発運用サービスを展開*15しているように、その需要は高まりつつあります。

機械学習エンジニアの主なスキルセットとしてはこんな感じ。

  • Python機械学習ライブラリの使用方法(scikit-learn,Pytorch,Tensorflowなど)
  • 機械学習の実験管理、パイプライン管理、テスト方法の知識を駆使したMLOps
  • Docker,Kubernetesなどコンテナ技術を使用したモデルデプロイ
  • REST APIの基本的な知識を用いたエンドポイントの運用
  • GPUの適切なコスト管理
  • 分散機械学習の構築
  • 機械学習運用サービスのSDKを使用したプラットフォーム開発
  • CI/CDツールを使用した日々のデプロイ・運用

既にWebシステムのモダンな運用を経験している方であれば、さほど高度ではないように思えるものの、この領域はまだ世界的に試行錯誤の段階にあります。MLテストはじめ概念的にも学術的にも少々難しい知識を要求されるケースがあるので油断は禁物です。

リサーチャーのスキルセットと小話

リサーチャーについては、基本的にはデータサイエンティストと求められる知識等は似通っているかと思います。大きな違いとしては、データサイエンティストがビジネス貢献を目的にしている点に対し、リサーチャーは独自に機械学習アルゴリズムを開発したり研究することを目的にしています。単にライブラリが使えるだけでなく裏にある理論をより理解しておくことはデータサイエンティスト以上に求められます。もちろん技術動向の把握についても重要で、最新の論文をチェックしアルゴリズムから自らコードに落として実装できるような技術も必要になります。 また、R&Dの領域では類似技術を扱ってきた別の人材も多いです。例えばニューラルネットワークの発展で機械学習での画像解析が急速に発展しましたが、画像解析のリサーチャーは以前にも多数存在していました。こうした人材が現在は機械学習のリサーチャーとなっているケースもあるので、分野によってはレッドオーシャンな領域も多いことは注意が必要です。

今回扱わなかったデータ関連人材

データベースエンジニア

今回扱わなかった人材の中で、「これってデータ活用人材じゃないの?」と思われる代表的なものとして、データベースエンジニアがあります。例えばオンプレシステムにおいてはOracle DBやSQL ServerといったRDBを主として扱うエンジニアとでも言いましょうか。

RDBを扱ってきたエンジニアはSQLにもデータ構造にも慣れており、データ基盤を扱う上でもかなりの戦力になることは間違いありません。その点ではデータ活用人材の一種と捉えてもいいのですが、彼らの主たる業務はオペレーショナルなデータベースを扱うことであり、データ基盤で扱うDWHや分散処理などとは若干の違いがあります。データエンジニアとスキルセットに共通する部分もあるものの、基本的には目的が違うと見ていいと思います。
また、ビジネス側の要求に応じてデータを抽出する役割も担うデータエンジニアに対し、基本的にはデータベースエンジニアはビジネスサイドとやり取りするケースは少ない、といった組織体制的な違いもありますね。

データスチュワードなどのデータマネジメント系人材

実はデータ活用に関わる人材はこれらエンジニアだけではありません。データ基盤を運用するためには周辺システムとの連携や、データの使用許可、運用変更などが毎日のように発生します。またユーザが目的のデータにたどり着くための調整を担うデータスチュワードや、企業全体のデータ活用方針をデザインするアーキテクト、品質管理、セキュリティなどにも専門性が必要で、マネジメント系の人材も多岐に渡ります。技術的な役割ではないものもありますが、これらの人材も今後市場では求められるようになるはずですので、気になる方は再掲ですがデータ総研さんの書籍*16をチェックしてみましょう。

最後に

さあ、いかがだったでしょうか。読むの大変だったでしょう。私が一番後悔してます。*17

データ活用領域は今後の発展が見込まれるため、人材獲得競争が活発化します。エンジニアとしてキャリアに悩んでいたら、このあたりの技術を身につけてみてはいかがでしょうか。活躍の幅がぐっと広がるはずです。たのしいですよ。

とはいえ途中述べたように、1本のブログでは語り切れない部分も多いので、近いうちにデータサイエンティストの勉強方法など含め、記事にしていきたいと思います。 私の感覚的な部分も多いので、「実態はこうだよ」みたいな意見があれば是非ともご指摘いただければと思います。

それでは次の記事でお会いしましょう~。

*1:私の渾身の創作です。

*2:今の20代の人には分からないネタかと思います。すみません。

*3:断言はできませんが

*4:最近はキャリアの書籍も出版されてるみたいですが、まだ読めていないのでここでは触れません。

*5:一応データ活用人材はデジタル人材の中核を成す人たちだという認識

*6:独自の定義です。もしかしたら名前あるのかも知れませんが…

*7:まあ、本番システムのDBにベタベタ触ってクエリ投げてるケースもありますが…

*8:リサーチャーもデータサイエンティストと同じ位置な気はしますが、企業によってアクセス可能範囲が違うかもしれません。

*9:兼任するケースも多いですが…

*10:何年か前にアメリカで言及されネタになったアレです。

*11:ビッグデータブームの時もデータサイエンティストがやはりバズワードになっててデータエンジニアの名前はあまり聞きませんでした

*12:この界隈のOSS多すぎません?

*13:データ総研さんの書籍ではデータ抽出は別の役割として分けられていましたし、それが健全です。ただ実態は…

*14:データサイエンティストに分類されることも多いです。

*15:AWSのSageMakerやAzure Machine Learningなど

*16:再掲 https://jp.drinet.co.jp/corporate/books/data-management-that-leads-dx-to-success

*17:記載ミスありましたらどんどんご指摘ください