AWS公式資料で挑むMLS認定(16)-特徴量エンジニアリング(データ前処理)

##### [前回] [AWS公式資料で挑むMLS認定(15)-データ前処理の基礎知識](https://qiita.com/mingchun_zhao/items/3a116a2aea4a34138ef7)

## はじめに

今回は、特徴量エンジニアリングの概念を勉強します。
機械学習予測精度を高める、重要なデータ前処理です。

## 機械学習のおさらいから

- 機械学習とは
    - 大量学習データをもとに、法則やパターンを見つけること
- 学習済みモデルとは
    - 学習完了した機械学習プログラム
    - 学習済みモデルの評価基準
        - 汎用パターンを学習でき、新データに対し期待とおりの精度で予測できるか
- 汎用パターンを大量データから見つけ出すには
    - データの特徴に着目すべき
    - データの特徴を表す変数が`特徴量`
- 機械学習モデルを構築するため
    - 人が特徴量を指定する必要あり

## 特徴量とは

- 分析対象データの中の、予測の手掛かりとなる変数
    - 年齢
    - 年収
    - 勤務年数
    - 売上履歴
- 構造化データの特徴量
    - 構造化データとは、明確に`列`と`行`の構造と概念を持つ表型データ
        - Excel
        - RDBMS
    - データ操作しやすい
        - 集計、演算、比較など
    - ユースケース
        - 売上履歴データを特徴量としモデル学習させ、売上予測
- 非構造化データの特徴量
    - 非構造化データとは、`列`と`行`構造で統一できないデータ
        - 画像の特徴量
            - 画素(ピクセル)の集合体、画像RGB情報
        - 音声の特徴量
            - 音波の波形を処理した結果
        - 自然言語処理のテキストデータの特徴量
            - 注目文言の出現頻度や重要度の指標
            - 単語を数値化したベクトル
    - 構造化データに比べて、取得/解釈/利用が難しい
        - 人間による特徴量の指定が難しい
    - ニューラルネットワーク手法を使用し
        - データのどこを特徴量として学習すべきかを見つける

## 特徴量エンジニアリング(特徴量設計)とは

- オリジナルデータから機械学習モデルに有用な説明変数(特徴量)を作成する作業
    - ドメイン知識に基づき、業務で蓄積された生のデータから機械学習に入力できる表を作成
    - 異なるデータベースに分散した多数テーブルから、統計変換や関係演算を使用し
        - 結合、集約、結合され、単一のフラットなテーブルを生成
- オリジナルデータとは
    - データが生成されたときの状態
        - 例: 時系列の温度データ、商品の購買履歴データ
- 特徴量生成
    - オリジナルデータから抽出された、目的のMLモデルの予測に役立つ変数
        - 例: 顧客ごとの商品購入総額
- 特徴量エンジニアリングに必要なスキル
    - 業務知見
    - データ加工
    - 数学・統計

## 特徴量設計の重要性

- 機械学習モデルの作成にとって、適切な特徴量の設計が必要不可欠
    - - 機械学習アルゴリズムの結果は、入力データに左右される
- 特徴量設計とは、機械学習の入力として最適な仮説の組み合わせを見つける工程
    - 過去データに関する知見により、パターンを見つけ、そこから仮説を立てる
    - さまざまな仮説を組み合わせることで、将来を予測
- 予測精度に大きく寄与する有用な特徴量を作れるかが、MLモデル開発の成否を左右
    - 間違った仮説を与えてしまうと、機械学習は正確な予測をすることができない
- 特徴量の品質は、機械学習モデルの精度と解釈性の両面で重要

## 特徴量エンジニアリングの課題

- 経験と知識に束縛される
    - 業務知識や経験に乏しいと、有用な特徴量を作成できない
    - 業務経験が豊富だと、意外な特徴量を着想しにくい
- 時間、計算リソースの不足
    - 集計/数値変換/コード化などさまざまな手法を適用してデータを変換
        - 時間や計算資源というリソース問題
        - 大量特徴量から有用なものを絞り込む特徴選択が煩雑

## 特徴量エンジニアリングの手法

### データ変換対象となる表の数や集計対象で分類

- 特徴量の作成
    - 単一表
        - 単一行
            - 単一変数
                - 数値
                    - 二値化
                    - 離散化
                    - 分位化
                        - 分位数とは、データを大きさの順に並べ、データ全体をいくつかのグループに等分した. ときの境界となる値
                    - 対数
                    - べき乗
                    - スケーリング
                        - 特徴量が取りうる値の範囲を変える・異なる特徴量同士の尺度を統一すること
                - カテゴリ(質的)
                    - エンコーディング
                        - カテゴリ変数を数値に変換し、符号化(encode)する手法
                    - 欠損値の特徴量化
                        - 欠損値を利用して特徴量を作成
                    - ビンカウティング
                        - カテゴリ変数を、カテゴリに関する統計量に置き換える手法
            - 複数変数
                - 主成分分析
                    - 多次元データのもつ情報をできるだけ損わずに低次元空間に情報を縮約する多変数解析の一種
                - 特異値分解
                    - ある行列を直交行列と対角行列の積に分解する計算
                - クラスター分析
                    - 大きな集団の中から、似たもの同士を集めてグループに分ける統計的な分析手法
                - 交互作用
                    - 2つの因子が組み合わさることで初めて現れる相乗効果
        - 複数行
            - 時間軸あり
                - ラグ
                    - 現時点よりも過去の実績値を特徴量として使用
                - 複数ラグ四則演算
                - 移動平均
                    - 時系列データを平滑化する手法
                - 移動最大値/移動最小値
                    - 過去Nサンプル中の最大値/最小値を取る移動最大値/最小値を算出
                - 移動標準偏差
                    - データの散らばり度合いを示す、分散の平方根をとることで計算される基本統計量
        - その他
            - FFT(Fast Fourier Transformation)高速フーリエ変換
                - 音響・振動測定分野における解析手法で、ある信号をいくつかの周波数成分に分解し、それらの大きさをスペクトルとして表す
            - グラフィカルラッソ(Graphical Lasso)
                - 多変量正規分布に従う観測から精度行列を推定するアルゴリズム
    - 複数表の結合
        - キー集計
            - 平均/最大/最小/標準偏差
- 特徴量の選択
    - 特徴量選択とは
        - データにある特徴量の集合から、部分集合を選択するプロセスのこと
        - 目的
            - モデルの訓練にかかる時間を短くする
            - 次元の呪いを避ける
            - モデルを単純化して解釈しやすくする
    - 特徴量選択手法
        - Filter Method
        - Wrapper Method
        - Emedded Method

### データ特徴量を整える手法

- Rescaling(リスケーリング)
    - 各特徴量の値の幅を揃えること
    - 共通のスケールで、公平に特徴量を比較できるように
    - 計算処理: 特徴量の最大値/最小値、特徴量の標準偏差

- Centering(センターリング)
    - 各特徴量の中心を0に揃えること
    - 平均を計算し、それを各値から引く
    - 結果としてどの特徴量でもデータの平均値は0となる

- Standardization(規格化)
    - RescalingとCenteringの組み合わせ
    - 各特徴量でデータの平均値が0、標準偏差が1となるようにする
    - データは標準正規分布(標準ガウス分布)という、アルゴリズム側が扱いやすい分布に従うことになる

- Principal component analysis(PCA)
    - データ内の重要な(分散の大きい)特徴量のみを取り出す処理
    - 線形回帰に有効

- Independent component analysis(ICA)
    - データ内の独立した特徴量を取り出す処理
    - 例: 混声合唱の音声シグナルから、それぞれのシグナルを分ける

## Amazon SageMaker Feature Store

- 機械学習(ML)の特徴量を保存、更新、取得、共有するためのフルマネージド型の専用リポジトリ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/ca5a4c2f-d0e7-d163-91d1-65a42187e4a2.png)
※ 引用元: https://aws.amazon.com/jp/sagemaker/feature-store


### Amazon SageMaker Feature Storeの機能

- 特徴量を保存してアクセスできる専用のリポジトリ
- チーム間で特徴量に名前を付けたり、整理したり、再利用したりする作業を簡単に行える
- トレーニング中およびリアルタイム推論中に統一の特徴量ストアを提供
- 特徴量の一貫性を保つため、追加コードを記述したり手動プロセスを作成したりする必要はない
- 保存されている特徴量のメタデータ(特徴量名やバージョン番号など)を追跡可能
    - インタラクティブなクエリサービスであるAmazon Athenaを使用して
    - 特徴量をバッチまたはリアルタイムでクエリして適切な属性を求めることができる
- 特徴量を継続的に更新
    - 推論中に新しいデータが生成されると、単一のリポジトリが更新される
    - トレーニングや推論中に新しい特徴量が常に利用できる

### Amazon SageMaker Feature Storeの主な特徴

- 様々なソースからデータを取り込む
    - Amazon Kinesis Data Firehoseなどのストリーミングデータソースを使用
    - Amazon SageMaker Data Wranglerなどのデータ準備ツールで作成された特徴量を直接保存
- 検索と検出
    - タグとインデックス特徴量を使って、SageMaker Studio のビジュアルインターフェイスから簡単に見つけられる
    - 特徴量カタログを閲覧することで、チームは特徴量に対する理解を深め、特徴量が特定モデルに役立つかを判断
- 特徴量の一貫性を確保
    - トレーニングと推論の両方で同じ特徴量を利用できるため、モデルが正確な予測を行える
        - トレーニングと推論は異なるユースケースで、ストレージ要件が異なる
            - トレーニングは、長時間で完全なデータセットを使用する
            - 推論はミリ秒単位で行う必要あり、データのサブセットを用いる
    - オフラインバッチ実行とリアルタイム推論で、同じ特徴量セットを使用できる
- 特徴量の定義を単一のリポジトリに保存することでチーム間の混乱を解消し、各特徴量の定義を明確にする
    - 特徴量を明確に定義すると、さまざまなアプリケーションで特徴量を再利用しやすくなる
- 特徴量を標準化
    - Amazon SageMaker Pipelinesと統合
        - 自動化された機械学習ワークフローを作成し、特徴量の検索と検出を追加/再利用
        - その結果、MLワークフローに特徴量の検索、検出、再利用を簡単に追加できる

## Amazon SageMaker Feature Storeの仕組み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/27bc8187-e7ed-e409-f685-15b0fe3edf76.png)

※ 引用元: https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/feature-store.html

### SageMaker Feature Storeを機械学習パイプラインの一部として使用

- 生のデータを読み取って処理
    - データの取り込み
        - ストリーミングを介してオンラインおよびオフラインストアに取り込むか
        - バッチでオフラインストアにデータを直接取り込む
    - FeatureGroupを作成
        - FeatureGroupとは、Feature Storeのスキーマによって定義される、レコードを記述する特徴量グループ
        - オンライン、オフラインストアの一方または両方に設定
        - データをFeatureGroupに取り込み、ストアに保存

- Feature Storeで、特徴量は特徴量グループと呼ばれる集合に保存される
    - FeatureGroupはRecordを表すためにFeatureStoreで定義された特徴量のグループ 
    - 各列が特徴量で各行が一意識別子を持つ表として、特徴量グループを視覚化
    - 特徴量グループは、特徴と各特徴に固有の値で構成される
    - レコードとは、一意のRecordIdentifierに対応する特徴量の集合

- Feature Storeのモード
    - オンラインモード
        - 特徴量は低レイテンシー(ミリ秒)の読み取りで読み込まれ
        - 高スループットの予測に使われる
        - 特徴量グループはオンラインストアに保存する必要あり 
        - オンラインストアからレコードの削除
            - DeleteRecord API コールを使用
            - 削除されたレコードはオフラインストアに追加される
    - オフラインモード
        - 大量のデータストリームがオフラインストアにフィードされ
        - それをトレーニングやバッチ推論に使う
        - 特徴量グループはオフラインストアに保存する必要あり
        - S3バケットをストレージに使る
        - Athenaクエリを使ってデータを取得
    - オンライン&オフライン
        - オンラインとオフラインの両モードが含まれる

- Feature Storeの特徴量グループへのデータ取り込み方法
    - ストリーミング
        - 同期 PutRecord API コールを呼び出すことで、レコードの集合がFeature Store にプッシュされる
        - Feature Storeで最新の特徴値を維持でき、更新が検出されると同時に新しい特徴値をすぐにプッシュできる
    - バッチ
        - SageMaker Data Wranglerで特徴量グループを作成
        - SageMaker Data Wranglerからエクスポートされたノートブックでジョブを処理
        - オフラインストアへのバッチ取り込みが可能
        - 特徴量グループがオンラインとオフラインの両方で使用できるように設定されている場合
            - オンラインストアへの取り込みもサポート 

## おわりに

信頼できるMLモデル生成に必要不可欠な、特徴量エンジニアリングを勉強しました。
次回も続きます。お楽しみに。