目次
概要
ある程度、データ分析の知識と技術がある方向けにデータサイエンティストとして必要な技術的なスキルの概要について、パートに分けて説明していきたいと思います。
動機
本業の方で、クライアントのAI部門立ち上げに関わっており、無事にサービス化フェーズまでもっていくことができ、一段落したので、自分の中での整理を兼ねてまとめようと思いました。
プロジェクトには様々な難所があり、クライアント側に AIや分析についての知識はほとんどなかったり、分析環境がないのでAWSの契約から始めたり、そもそも分析に必要なデータがなかったので、人力でスタンドアローンのPCからデータを引っこ抜きに行ったり、分析を開始するまでにかなり苦労しました。
分析を開始したけれども、データの数が多すぎて通常の分析環境では扱いきれなかったり、異常データが正常データと比べて極端に少なくて、モデルの判定結果がほとんど正常に傾いてしまったりと、実データならではの苦労も沢山ありました。
今回は、その経験をもとに、実務で必要なデータサイエンティストして必要なスキルについて整理したいと思います。
はじめに
Kaggleやデータ分析やAIの説明本、
サイトのサンプルのデータセットは、きれいに整形されている状態で、サイズもローカルPCで作業できる大きくても数百MB程度になっており、誰でもすぐに分析やモデル作成できるようにされた状態になっていることがほとんどです。
実業務になると、データに大きな欠損やノイズが含まれていたり、
データサイズが数百TBを超すようなビッグデータであったり、
そもそもデータがないので作り出したりする作業が必要になり、
経験上与えられたデータでそのまま分析できる状態だったことは一度もありませんでした。
大半が、分析したりモデルを作る為の準備に大半の時間を費やします。
また、実際の業務になるとビジネス的な観点も考慮が必要になるため、
セキュリティを考慮した環境の構築や、分析やAIの判定結果をどのように使っていくかを考慮したデータ分析をしていく必要があります。
以下、0からデータ分析していく上で必要な作業のフェーズになります。詳細についてはリンク先をご覧ください。
- 環境作成
- データ収集
- データの前処理
- 特徴量化
- データセットの作成
- モデル作成
- 評価
- 精度改善
- モデル説明
本来であれば、環境作成の前に、どういう目的で分析をして、分析のゴールを何にするかという要件定義から始めますが、今回は技術を中心に説明していきたいので、割愛していきます。
環境構築
分析やモデルの作成をしていくための環境を作成していくフェーズになります。
分析をするために必要なライブラリやGPUの環境を整えていくことがメインになりますが、
VPNサーバーや踏み台サーバー、分散処理サーバーなどもクライアントのセキュリティ要件やデータに合わせて、必要なサーバーを構築をしていきます。
システム開発の経験がないデータサイエンティストの方々は、
インフラ部分の環境構築を苦手とする方々が多いかと思います。
環境の構築は、エンジニアの方に任せてしまえば良いという考えの方もいるかもしれませんが、
実際に環境を使う人が構築までできた方が良いに越したことがありません。
人員のリソースが豊富な会社であれば、作業の分業化が可能であれるかもしれませんが、
ベンチャーであったり、フリーランスになるとそもそも人がいないため、
環境構築から全て一人で担当できるスキルも必要になります。
環境構築は、市場での価値を高めてく上でも
他のデータサイエンティストとの差別化ができる為、使えるスキルだと思っています。
詳細については、こちらの記事をご覧ください
[EMR][Docker][pyspark-notebook]分析環境の構築例
データ収集
判別モデルを作成することを前提に、データの収集について説明していきます。
データ量
モデル作成にあたり、データの数は多ければ多いほど良いです。
データ量の目安としては、各ラベルごとに1000件あれば、ある程度信頼のできるモデルが作成できるかと思います。
【データの数と精度の図】
データの数を増やせない、異常データの数が集められないという状況であれば、
後述のアップサンプリングでデータの数を増やしたり、AutoEncoderで正常データのみ学習して、異常値を検知するようなやり方をとります。
データの質
データの偏りのことを質と呼んでいます。
例として、装置A~Fの6種類があって、装置の異常検知を判定するモデルを作成するケースをあげます。
この場合、それぞれの装置で取れるデータ数にバラつきがあったり、異常データの数にバラつきがあると判定結果に影響します。
Aの装置に異常がほとんどなく、Fの装置に異常が偏っていたりしている場合、モデルはデータを無視して装置の種類だけで異常の有無を判別してしまうことがあります。
理想的なのは、データを年数やタイプや条件であったり、様々な条件で分類したときに、それぞれ同じデータ数でラベルの数も偏っていないのがベストです。
詳細については、こちらの記事をご覧ください。
[RPA][Webスクレピング]データの収集方法について解説してみる。
データの前処理
取得した生のデータを分析出来る形に変換する作業になります。
表データと画像データで前処理の方法が異なります。
表データは、機械的に前処理ができますが、
画像データは、アノテーションやラベル付けの作業で人力が必要になる場合があり、かなりの時間を要します。
自然言語の処理は、業務上では経験したことがないので割愛しておりいます。
詳細については、こちらの記事をご覧ください。
[Pandas][PySpark]データの前処理方法についての解説
特徴量化
データをもとに特徴量化します。
そもそもが1次元のデータの場合は、そのまま各カラムの値を特徴量として採用する場合もあります。
設計方針
判定モデルの結果に対して、説明が求められるかどうかの要件の有無で、
設計の方針が異なります。
- 説明が不要(画像判定、音声認識など、モデルの出力結果だけあればよいもの)
- データの特徴をとらえやすい特徴量を作成する。
- そのまま生データをモデルに入力する。
- 説明が必要(病気の診断、マーケティングなど、判定の根拠が必要になるもの)
- ビジネス的に意味や説明能力がある特徴量を作成する。
説明が不要であれば、
最大、最小、平均、標準偏差などの基本的な統計量に加えて、特徴がとらえやすい関数の結果を特徴量として作成します。DeepLearnigを使う場合は、そのまま生データを入力することが出来ます。
例)
画像であれば、エッジの処理結果やヒストグラムの値など
時系列であれば、フーリエ変換の結果など
説明が必要であれば、
どの特徴量が判定結果に影響が強いかどうかを示す必要があります。
そのため、判定結果の影響力で納得のできる特徴量を作成し、データの大小で意味が説明できるとよいです。
例)運転診断モデルの場合、運転速度の平均値、急停止、急発進の回数など
詳細については、こちらの記事をご覧ください。
[中古車査定/CarEvaluationDataset][相関分析]特徴量の設計と確認方法について解説してみる。
データセットの作成
判定モデルに入力する前のデータ加工作業について解説したいと思います。
大まかな流れとしては、
- 標準化/正規化
- ダミー変数化
- (アップサンプリング/ダウンサンプリング)
- データセットの分割
になります。
詳細については、こちらの記事をご覧ください。
[sklearn][SMOTE]データセットの作成方法について解説してみる
モデル作成
モデルには、大きく回帰と分類に分かれます。
- 回帰
→ 数値を予測する。 - 分類
→ 決められたクラスを予測する。
今回は、分類モデルについて紹介していきたいと思います。
代表的な4つのモデルについて説明します。
- ロジスティック回帰
- アンサンブル系(ランダムフォレスト)
- 勾配ブースティング(XGBoost/LightGBM)
- DeepLearning(マルチパーセプトロン)
使い分けとしては、
クイックに精度を見たい場合は、ロジスティック回帰、ランダムフォレスト
時間がかかっても少し精度を上げたい場合は、ブースティング系
とにかく精度が欲しい場合は、DeepLeraning
で良いと思います。
画像系の分類であれば、DeepLearningを使っておけば間違いないと思います。
詳細については、こちらの記事をご覧ください。
[xgboost][keras]モデルの作成について解説してみる
評価
検証用データを使用して、作成したモデルを評価します。
評価には、以下の指標を用いられます。
- Accuracy(正確度)
- 正例、負例の重要度が同じ場合
- 正例、負例の重要度が同じ場合
- Recall(再現性)
- 検出率の精度を重要視する場合
- 検出率の精度を重要視する場合
- Precision(適合率)
- 見落とし率を重要視する場合
- 見落とし率を重要視する場合
- F-measure(F値)
- ビジネスの要件でRecallとPrecisionのどちらとも言えない場合
- ビジネスの要件でRecallとPrecisionのどちらとも言えない場合
- AUC
- モデルの性能を評価したい場合
【ROCカーブ】
1-4は、混同行列と合わせて確認されます。
5はROC曲線と合わせて確認されます。
不均衡データの場合、
1-4だと正しく評価できないので、5のAUCを用いて評価します。
ビジネスの要件に合わせて、どの指標を使用して評価するかが大切になりますので、
クライアントのビジネスを理解しておく必要があります。
詳細については、こちらの記事をご覧ください。
モデルの評価指標について解説してみる
精度改善
作成したモデルの精度を上げるために、モデルのハイパーパラメータの調整を機械的にする作業になります。
パラメータ変更→学習→精度検証を繰り返し、精度が高かったパラメータを採用します。
モデルのハイパーパラメータの例として
- DeepLeraning
- ノード数、層の数、dropoutの割合、バッチサイズなど
- アンサンブル系
- 決定機の本数、層数、サブサンプルの抽出割合、子ノードの最小重み制限など
などがあり、これらのパラメータを調整することで、精度を上げていくことが出来ます。
パラメータの調整方法としては、大きく2種類あります。
- グリッドサーチ
- 指定された範囲を全探索し、一番精度の高いパラメータを探索する。
- ベイズ最適化
- ベイズ統計に基づき、ベストに近いパラメータを探索する。
【ベイズ最適化の図】
使い分けの用途としては、
時間をかけて精度を上げる:グリッドサーチ
クイックにある程度の精度まで上げる:ベイズ最適化
で良いと思います。
詳細については、こちらの記事をご覧ください。
[optuna]パラメータ探索について解説してみる
モデル説明
モデルの判定結果の説明方法になります。
クライアントビジネスにおいても、モデルの根拠を求められる場合が多いので、その手法をご紹介したいと思います。
どうしてもAIは、入力から出力までがブラックボックス化してしまいがちですが、
AIの判定根拠をホワイトボックスに近づける作業になります。
どのようにホワイトボックス化するかというと、表データと画像系でそれぞれやり方が異なります。
表データの場合、下記を使用してモデルの判定の要因となった説明変数の重要度から判定根拠を示すことが出来ます。
- 回帰係数/Feature Importance
- ロジスティック回帰やアンサンブル系で、各説明変数の重みを取り出す。
- SHAP/LIME
- 判別結果のスコアをもとにロジスティック回帰モデルを疑似的に作成し、回帰係数を取り出す
- PeermutationImportance
- 各説明変数を1つずつ除外し、全体の精度にどのくらい影響があったのかどうかを数値化する。
画像データの場合は、判定根拠が強い部分を強調し画像化することで、
判定根拠を説明することが出来ます。
手法としては、
- Grad-cam
- DeepLearningのモデルのみ利用可能。判定結果を逆伝搬しパラメータの変化が大きさで影響度をみる
- SHAP
があります。
詳細については、こちらの記事をご覧ください。
[SHAP][PI][Grad-cam]モデルの説明
まとめ
一通りデータ分析のスキル面について解説しました。
与えられたきれいなデータに対して、判別モデルの作成、評価しかできない、AIエンジニアやディープラーニングエンジニアといわれる人がいる増えている中、
フルスタックで環境構築から分析、モデル構築ができるデータサイエンティストは中々いないので、
自分の市場価値を高める上でもスキキライせず全部できるようになった方が良いと思います。