AWS認定機械学習 - 専門知識を受験した時の話

## この記事の概要
2023/01/08
**AWS認定機械学習 - 専門知識**
(AWS Certified Machine Learning - Specialty(MLS-C01))
を受験したので、その時の記録

復習用ノートとして、また後で見返して今後の資格試験受験時の参考にしたり仕事で使いたくなったとき思い出せるようにまとめます。

## 試験の概要

![スクリーンショット 2022-12-29 0.26.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/37fa931e-ea1d-ab88-1ceb-3a7fef6e4b32.png)

**SPECIALTY**カテゴリの試験で、この試験では「AWS データレイクと分析サービスを利用して、データからインサイトを得るための専門知識を認定します。」とのこと。
AWS公式より引用：[引用元](https://aws.amazon.com/jp/certification/certified-data-analytics-specialty/)

**◼︎ 試験要項**
問題数　　：65問(うち15問は採点対象外)
試験時間　：180分
受験料　　：¥30,000(税別)※公式サイトでは「300USD」の表記ですが、為替レートに関わらず税別¥30,000です。
合格ライン：100~1000点中750点※問題の難易度により配点が異なるスケールスコア
受験資格　：なし
有効期限　：3年

**◼︎ 出題範囲**

| 分野 | 出題割合 |
|:--|:--:|
| 第 1 分野: データエンジニアリング | 20% |
| 第 2 分野: 探索的データ分析 | 24% |
| 第 3 分野: モデリング | 36% |
| 第 4 分野: 機械学習の実装とその運用 | 20% |

**2023/01時点の最新バージョン(Ver.2.0)** のものです。
バージョンアップで範囲等は変更されるので、受験時は公式サイトの「試験ガイド」を確認してください。
[AWS Certified Machine Learning - Specialty 認定](https://aws.amazon.com/jp/certification/certified-machine-learning-specialty/)

## 勉強開始前の状態
AWSで動いているアプリの保守開発/運用の業務を5年程度、現在も継続中。機械学習の経験はゼロ。
AWS認定はこれまで10個取得済み。

- [AWS認定ソリューションアーキテクトを受験した時の話](https://qiita.com/aminosan000/items/24c6dff9532658a5c4d5)
- [AWS認定デベロッパーアソシエイトを受験した時の話](https://qiita.com/aminosan000/items/89bc76f77626314f3182)
- [AWS認定SysOpsアドミニストレーターアソシエイトを受験した時の話](https://qiita.com/aminosan000/items/b1765260e8ad1435a366)
- [AWS認定ソリューションアーキテクトプロフェッショナルを受験した時の話](https://qiita.com/aminosan000/items/f172b7add8303926bddc)
- [AWS認定DevOpsエンジニアプロフェッショナルを受験した時の話](https://qiita.com/aminosan000/items/ee2fe130bfca1164f4a5)
- [AWS認定セキュリティ - 専門知識を受験した時の話](https://qiita.com/aminosan000/items/435fc411a4d10cf6ba43)
- [AWS認定データベース - 専門知識を受験した時の話](https://qiita.com/aminosan000/items/1f2a8d5b7611a3d31247)
- [AWS認定アドバンストネットワーキング - 専門知識を受験した時の話](https://qiita.com/aminosan000/items/dfea62d2c6cc2763d15c)
- [AWS認定データ分析 - 専門知識を受験した時の話](https://qiita.com/aminosan000/items/307933b51494756386e8)

## 勉強に使ったもの

**1. AWS公式模擬試験(AWS Certified Machine Learning - Specialty Official Practice Question Set (MLS-C01 - Japanese))**
**AWS Skill Builder**で**無料**で提供されている20問の**模擬試験**。何度でも実施できるのではじめに実施します。

https://explore.skillbuilder.aws/learn/course/internal/view/elearning/12525/aws-certified-machine-learning-specialty-official-practice-question-set-mls-c01-japanese

**2. AWS公式E-learning(Exam Readiness: AWS Certified Machine Learning - Specialty (Japanese) 日本語実写版)**
**AWS Skill Builder**で**無料**で提供されている試験対策の**公式E-learning**、試験範囲についてサンプル問題をはさみながら教えてくれます。試験範囲の要点について知ることができるので、受講する価値はあると思います。

https://explore.skillbuilder.aws/learn/course/internal/view/elearning/629/exam-readiness-aws-certified-machine-learning-specialty-japanese-ri-ben-yu-shi-xie-ban

**3. オンライン問題集(非公式)**
AWS認定受験時に毎回購入している「Whizlabs」
DASのコースは最新のバージョンの問題が **271問(65問×3パターン+セクション問題が61問+お試し問題が15問)** 用意されています。
今回は11月のBlack Fridayセールのときに購入しておいたので**18.95USD**からで50%offで**9.47USD**(日本円で¥1,350ぐらい) でした。
いつもどおり、Google翻訳で翻訳して利用。

https://www.whizlabs.com/learn/course/aws-certified-machine-learning-specialty

この試験の対策のための書籍や公式以外のE-learningは見つかりませんでした。(2023/01時点で)

## 勉強(試験準備)の流れ
### 1. 試験ガイドを読む
はじめに、公式サイトの[「**試験ガイド**」](hhttps://d1.awsstatic.com/ja_JP/training-and-certification/docs-ml/AWS-Certified-Machine-Learning-Specialty_Exam-Guide.pdf)を読みます。

### 2. サンプル問題と模試を実施する
次に、公式の[**サンプル問題**](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-ml/AWS-Certified-Machine-Learning-Specialty_Sample-Questions.pdf)と[**模試**](https://explore.skillbuilder.aws/learn/course/internal/view/elearning/12525/aws-certified-machine-learning-specialty-official-practice-question-set-mls-c01-japanese)をやってみます。
**無料**なので気軽に実施できます。これで**問題のレベル感**と**自分のレベル感**、そのギャップを確認します。
もちろんここでわからなかった部分はメモしておいて**後で調べます**。覚えたほうが良さそうな部分は**ノートに書き出します**。

サンプル問題では、AWSに関係のない「機械学習」の問題が多く、知らない単語だらけで全く解けませんでした。
「機械学習」についての経験が0なのもありますが、これまで受験してきたSpecialty系の試験の中で一番「専門知識」を問われる印象です。

模試も同様に機械学習アルゴリズムの特徴や目標メトリクスなどAWSにベンダーロックされていない内容が多かったです。

### 3. Exam Readinessを受講する
公式E-Learningはためになることが多いので、受講しておきます。
出題範囲の要点を説明してくれますが、「1年以上の経験を有するMLの専門家向け」と前置きしていて登場する要素の詳細は結構省かれているので、各モジュールで出てくるキーワードについて自分で調べる必要があります。
機械学習の書籍を1冊買って読むぐらいでちょうどよかったかもしれません。

![スクリーンショット 2023-01-09 3.33.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/d36778f1-2108-1fdb-67aa-5b43f19094e0.png)

### 4. 練習問題を解く
ここまでで機械学習の基礎をある程度学習できたので、あとは練習問題で知識を深めていきます。
今回の試験は練習問題を解き始めるまでの基礎の学習に一番時間がかかりました。(ここまでですでに30時間ぐらい)
全問解いてから回答の確認をしていると問題文を2回ずつ読むことになって効率が悪いので、practice modeでその場で回答を確認し、間違っていた場合メモしたりすぐに調べるようにしています。

### 5. 復習する
「機械学習」に関しては座学のみで実戦経験がないので、理解が浅い部分も多く、ノートを見返しながら疑問に思ったところを調べて知識を追加しつつ、暗記要素は反復して刷り込んでいきました。

## 勉強時間
**約60時間**

## 受験後
結果は**スコア821**で合格。
全問解き終わった時点で残り60分程度、残り時間は先頭からしっかり見直しして、終了5分前に提出。
さすがに60時間勉強しただけあって、それなりに手応えを感じました。

![スクリーンショット 2023-01-09 2.43.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/d61bb1ba-0731-f72f-e3b5-fa3f4e76ca5d.png)
![スクリーンショット 2023-01-09 2.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/6a24f5e7-e8f2-c5b2-f1cc-773969398b75.png)

AWS認定も残りあと1つ！
最後の「SAP on AWS」は今年度追加された試験で、「SAP」についても未知の状態ですが、2月あたりに受験予定です！
とりあえず「SAP」の本を読むところから、ぼちぼちやっていこうと思います。

![スクリーンショット 2023-01-09 2.44.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/3ce30215-39a1-2abb-5ee3-573a0a123dbd.png)

## 勉強ノート
試験のために勉強しながらまとめたノート  
※ここに書いてあることは、あくまで私が理解が足りないと感じ、覚えたかったことだけです。試験範囲を網羅はしていません。

### 機械学習基礎

#### 機械学習(ML:Machine Learning)
コンピューター(機械)に大量のデータを入力し、**データに潜むパターンやルールを発見/記憶することを反復**(学習)させる技術。
機械学習はAI(Artificial Intelligence/人工知能)と呼ばれる技術の一部である。
機械学習は以下のプロセスにより成り立つ。

1. データの収集
1. データのクレンジング
1. 特徴量エンジニアリングの実行
1. モデルの定義
1. モデルのトレーニング(学習)
1. テストの実行
1. 結果の予測(推論)

#### 深層学習(Deep Learning)
ニューラルネットワークを利用した機械学習の1種。
学習に多くの時間とデータ、高いマシンスペックを要するが、より複雑な処理が可能。

https://business.ntt-east.co.jp/content/cloudsolution/column-287.html

#### モデル
機械学習における「モデル」は**入力データに対して結果(出力)を推論するための、仕組み**(ロジック)を指す。
※入力→モデル→出力の形になる。

#### アルゴリズム
機械学習における「アルゴリズム」は**学習(トレーニング)によって「モデル」を生成するための、学習手法**を指す。

機械学習は「**学習**」プロセスと「**推論**」プロセスに分けることができ、「学習」プロセスで「**アルゴリズム**」によって「**モデル**」を作り、「推論」プロセスで「**モデル**」によって**推論**を行う。

![Untitled(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/f9b05f2d-75e9-1a24-1df4-24a7de56ffcc.png)

#### 教師あり/教師なし
アルゴリズムは大きく分けて「教師あり」「教師なし」「強化学習」に分けられる。

- 教師あり: 各データと「**解答**(のラベル)」のセットを入力とする。
- 教師なし: **データセットのみ**を入力とし、特徴に基づき分類する。
- 強化学習: 機械自身が試行錯誤し、より高い「報酬(スコア)」を得られる結果を探す。

#### 分類/回帰
教師あり学習はさらに「分類」と「回帰」に分けられる。

- 分類: データが属する**クラスを予測**する。結果が2値(合否など)の場合「2値分類」、3値以上の場合「多クラス分類」という。
- 回帰: 連続する数値から、今後の**数値の変化**を予測する。

※クラスを **離散値(discrete)** 、連続する値を **定量的(quantitative)** という言う方もする。このいずれかの単語が出てきたら「分類/回帰」を指していると考える。

#### クラスタリング/次元削除
教師なし学習は「クラスタリング」と「次元削除」に分けられる。

- クラスタリング: データを特徴によって**グループ化**する。
- 次元削減: 多次元のデータに対し、分析に**不要な情報や冗長な情報を削除**し圧縮する。これにより高速化やグラフによる可視化を可能にする。(次元数が多いと平面で図示できない)

分類とクラスタリングが紛らわしいが、違いは「**分類は教師あり**」「**クラスタリングは教師なし**」と覚える。

#### 自然言語処理(NLP: Natural Language Processing)
人間の言語（自然言語）を機械で処理し、内容を抽出すること。

NLPの代表的なアルゴリズムとして以下がある。

- OSB(直行スパースダイアグラム)
- TF-IDF
- Bag-of-Words
- N-Gram

https://ledge.ai/nlp/

#### コーパス
AIが自然言語を扱う際に使う文章を構造化し、データベース化したもの。

https://zero2one.jp/ai-word/corpus/

#### トピックモデル
機械学習における「トピック」とはNLPにおいて文章の主題(=トピック)を指す。
各文章に対して、その主題が何かを抽出するためのモデルが「トピックモデル」で、トピックによるグループ化や次元削減に用いられる。

https://spjai.com/topic-model/

この「トピックモデル」の代表的な手法が3つある。

- LSI(Latent Semantic Index/潜在的意味解析): 同じ意味を持つ単語をグルーピングして、トピックを抽出する。
- PLSI(Probabilistic Latent Semantic Indexing): LSIを確率生成モデルとして考え直したもの。
- LDA(Latent Dirichlet Allocation): PLSIをベイズ化したもの。

#### バイアスとバリアンス

##### バイアス
機械学習において「**実際値と予測値の差**」を「バイアス」という。
この差が小さいほど精度が高く、正確に予測できているということになる。
誤差が大きい状態を「高バイアス」と呼び、精度が低いことになる。

##### バリアンス
機械学習において「**予測値が散らばっている度合い**(予測値の最小と最大の差の大きさ)」を「バリアンス」という。
散らばり度合いが高い状態を「高バリアンス」と呼び、精度が低いことになる。
高バリアンスは「**過学習**」が原因である。訓練を重ねることにより、結果は多く得られるが、大きく外れた予測値も増えてしまう。

バイアスとバリアンスは**トレードオフ**の関係であり、**訓練が足りないと高バイアス**になりやすく、**訓練をしすぎると高バリアンス**になりやすい。

#### アンサンブル
複数のモデルによる予測を**組み合わせる**(多数決を取る)ことで、予測の精度を上げる手法。
アンサンブルは大きく以下の3つの手法にわけられる。

| 手法 | 特徴 | アルゴリズム例 |
|:-:|:-|:-|
| **ブースティング**(Boosting) | 前回誤っていた部分を重点的に再学習させることを**繰り返す**ことで精度を上げていく。並列処理ができないため時間がかかる。 | ・GBDT<br>・XGboost |
| **バギング**(Bagging) | 学習データの一部のみを利用し、**並列で計算**した複数の結果を最後に結合する。データを一部しか使わないことで過学習を防ぐ。 | ランダムフォレスト |
| **スタッキング**(Stacking) | **複数の手法**のモデルを組み合わせて学習モデルを作る。 | - |

#### ハイパーパラメータ
機械学習アルゴリズムの**挙動を設定**するパラメータ。
エポック数、学習率、閾値、ミニバッチサイズ、層の数、一層あたりのニューロン数、などがあり、精度を上げるために**チューニング**していく。

https://www.codexa.net/hyperparameter-tuning-python/

#### 学習率
機械学習の最適化において、重みパラメータを一度に**どの程度変化させるか**を表す調整パラメータ。機械学習では反復的に重みパラメータを変更していくが、**学習率の値が高いほど一度に変更する重みパラメータの大きさが大きくなる**ので学習のスピードは上がり、反対に低ければ学習のスピードは下がる。
学習率を高く設定し過ぎると、一部の偏ったデータから学習しすぎてしまい、正確性が下がる可能性がある。

https://www.tryeting.jp/column/6842/

#### オーバーフィッティング
オーバーフィッティング(または**過学習/過剰適合**)とは、回帰分析や機械学習で、学習データに対してあまりに忠実に**適合しすぎ**て本来データが示唆する傾向から大きく外れてしまう現象。
トレーニング対象のデータに対しては高い精度が出るのに対し、**未知のデータに対しては期待する精度が出ない**状態になってしまう。
データエンジニアリングの中で、オーバーフィッティングが起きていた場合、対策として、次元削減、正則化、ドロップアウトなどを行う。

https://e-words.jp/w/%E9%81%8E%E5%AD%A6%E7%BF%92.html

#### 正則化
正則化（regularization）とは、不良設定問題を解いたり**過学習を防いだり**するために、**情報を追加**する手法。
重みの絶対値の値が大きくなると、誤差関数の値が大きくなるようなペナルティーをかけるなどする。

https://zero2one.jp/learningblog/yobinori-collab-regularization/

#### ドロップアウト(Dropout)
ニューラルネットワークにおいて**過学習を防止**する手法の一つ。

https://qiita.com/shu_marubo/items/70b20c3a6c172aaeb8de

#### 損失関数(loss function)
損失関数とは機械学習**モデルが算出した予測値と実際の正解値のズレ**を「損失(loss)」と言い。損失を計算するための関数が「損失関数」。
その結果出力される「損失」は、実際の正解値と予測値の距離や差、違いの総量や平均とみなすことができる。

https://zero2one.jp/ai-word/false-positive-false-negative/

#### Bag-of-Words
NLPのアルゴリズムの一つ。
文章内の**単語の出現回数**から分類/評価を行う。

https://data-analytics.fun/2020/03/12/bag-of-words/

#### TF-IDF(Term Frequency-Inverse Document Frequency)
NLPにおいて、各文書（document）中に含まれる各単語（term）が「その**文書内でどれくらい重要か**」を表す統計的尺度の一つ。
「ある文書内」で「ある単語」が「**どれくらい多い頻度で出現するか**」を表すtf（term frequency：単語頻度）値と、「全文書中」で「ある単語を含む文書」が「（逆に）**どれくらい少ない頻度で存在するか**」を表すidf（inverse document frequency：逆文書頻度）値を掛け合わせた値。

https://atmarkit.itmedia.co.jp/ait/articles/2112/23/news028.html

#### N-gram
NLPのアルゴリズムの一つ。文字列に対する前処理などに利用される。(「N文字インデックス法」「Nグラム法」などとも言う。)
N-gram=**連続するn個の単語や文字のまとまり**、これを検索する手法も「N-gram」。
1-gram、2-gram、3-gramのことを**unigram**（ユニグラム）、**bigram**（バイグラム）、**trigram**（トライグラム）と呼ぶ。

```text
Please call the number below
```
:arrow_up: の文章にN-gramを適用すると
`Please`, `call`, `the`, `number`, `below` の5個のユニグラム
`Please call`, `call the`, `the number`, `number below` の4個のバイグラム
になる。

Bag-of-Wordsと違い、連続する複数単語を組み合わせるため、**単語のつながり(文脈)**による分析ができる。

https://qiita.com/kazmaw/items/4df328cba6429ec210fb

https://atmarkit.itmedia.co.jp/ait/articles/0902/04/news144_4.html

#### 直行スパースバイグラム(OSB:Orthogonal Sparse Bigram)
NLPのアルゴリズムの一つ。文字列に対する前処理などに利用される。
単語のグループから「先頭の単語+その他の単語のペア」を複数作る。

```text
The quick brown fox
```
:arrow_up: の文章にOSBを適用すると

`The_quick`, `The__brown`, `The___fox`の3つのペアができる。
(単語の間には単語間の別の単語の数に応じた`_`(アンダースコア)が入る)

https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/data-transformations-reference.html#orthogonal-sparse-bigram-osb-transformation

#### ストップワード
NLPにおいて、一般的で予測の役に立たないなどの理由で処理対象としないワード。(「of」「the」「です」「ます」など)
予め辞書として定義しておくか、出現頻度が極端に多い、などで判定し、除去する。

https://mieruca-ai.com/ai/nlp-stopwords/

https://qiita.com/Hironsan/items/2466fe0f344115aff177

#### 欠損値の補完
データセット内のデータポイントに欠損があると、エラーが起きたり、**正確に予測できない**可能性がある。
そのため、データの事前準備として欠損値を補完する処理を行う。補完の方法により、適したデータタイプや特性が異なる。

| データポイントの生成方法 | データタイプ | 特性 |
|:-:|:-:|:-|
| 平均値/中央値 | 数値 | 処理が軽量で簡潔、正確性は高くない |
| 0(固定値) | カテゴリ | 処理が軽量で簡潔、正確性は高くない |
| k-NN | 数値 | 処理に時間がかかる、正確 |
| 深層学習 | カテゴリ | 処理に時間がかかる、正確 |
| 連鎖方程式(MICE)による多変量代入 | 数値/カテゴリ | 処理に時間がかかる、正確 |

https://towardsdatascience.com/6-different-ways-to-compensate-for-missing-values-data-imputation-with-examples-6022d9ca0779

#### 偽陽性/偽陰性
二値分類(二項分類/バイナリ分類)の結果は**正解値**(**実際の値**)**と予測値の関係**により以下の4つに分けられる。

**正しい予測**
- 真陽性(**TP**:True Positive)
- 真陰性(**TN**:True Negative)

**誤った予測**
- 偽陽性(**FP**:False Positive)※誤って陽性と予測=誤検出
- 偽陰性(**FN**:False Negative)※誤って陰性と予測=検出漏れ

行列で表すと以下のようになる。

| 正解値\予測値 | 陽性 | 陰性 |
|:-:|:-:|:-:|
| **陽性** | 真陽性(TP) | 偽陰性(FN) |
| **陰性** | 偽陽性(FP) | 新陰性(TN) |

この行列を**混合行列**という。

**偽陽性**=予測値が"**陽性**"で不正解なので"**偽**"、本当は陽性ではない"**偽の陽性**"と覚える。(陰性も同様)

ここで言う**陽性=Positive**は必ずしも「正しい方(良い結果)」とは限らない、モデルにより検出したい方を陽性とする場合が多いため、**異常検出**の場合「**異常=陽性**」となる。
これを逆で考えてしまうと、誤った回答を選択してしまうことになるので注意。

https://zero2one.jp/ai-word/false-positive-false-negative/

#### 評価指標(メトリクス)
機械学習ではモデルに対して予測の正誤率を測る「評価指標」がある。

そのうちの1つ、再現率(Recall)を例に取る。
「**再現率（Recall）**」とは、二値分類(二項分類/バイナリ分類)の評価指標の一つで、正解値が「陽性（Positive）」であるデータ全体のうち、機械学習モデルによる予測値も「陽性」で**正解だった確率**。0.0（＝0％）～1.0（＝100％）の範囲の値になり、1.0に近づくほどより良い。真陽性率とも呼ぶ。
※AWS公式のサンプル問題では「リコール率」という呼び方をされていた。

「 $ Recall = {TP \over TP+FN} $ 」 の式で求められる。

この他にも以下の評価指標がある。※これらは「分類問題」の評価指標

| 名称 | 計算式 | 説明 |
|:-:|:-:|:-:|
| Recall<br>(TPR/再現率/真陽性率) | $ Recall = {TP \over TP+FN} $ | 正解が陽性に対する陽性予測の割合 |
| Specificity<br>(TNR/特異度/真陰性率) | $ Specificity = {TN \over TN+FP} $ | 正解が陰性に対する陰性予測の割合 |
| FPR<br>(偽陽性率/誤検出率) | $ FPR = {FP \over FP+TN} $ | 正解が陰性に対する陽性予測の割合 |
| Accuracy<br>(ACC/正解率) | $ Accuracy = {TP+TN \over TP+FP+FN+TN} $ | 正しい予測の割合(全体に対する真陽性と真陰性の割合) |
| Precision<br>(適合率/精度) | $ Precision = {TP \over TP+FP} $ | 陽性予測に対する正解が陽性の割合 |
| F-measure<br>(F値/F1値) | $ F-measure = {2 \times Precision \times Recall \over Precision+Recall} $ | PrecisionとRecallの調和平均<br>(この2つがトレードオフになるため、バランスを取る) |
| AUC(ROC or PR) | - | 「Precision,Recall」または「FPR,Recall」の2つの指標をあわせたもの<br>※詳細は少し下に別途記載 |

模試やサンプル問題を見る限り、**評価指標の名称に対する意味は暗記必須**
(意味を覚えていないと目的に対しどの指標が適切か考えられない)
「Accuracy」と「Precision」は機械翻訳だとどちらも「精度」になってしまうため、日本語が怪しいAWS認定試験の対策としては英語で覚えておくのが安全。
※AWS認定試験は試験中に原文と日本語訳の表示切り替えができる。

:arrow_down: 文字だけだと覚えづらいので混合行列の「形」で覚える。
![評価指標](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/f1ba30de-efa7-8487-1f25-2f47497ce0e5.png)

https://atmarkit.itmedia.co.jp/ait/articles/2209/29/news048.html

https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/binary-model-insights.html

https://www.codexa.net/ml-evaluation-cls/

##### AUC(Area Under the Curve)
「ROC曲線」または「PR曲線」の「**下面積**」のこと。連続する**複数の閾値**で結果を計測し、その結果をプロットした曲線の「**下面積**」**が広くなるほど精度が高い**と判断する。
※RecallやPrecisionなどは1つの閾値での結果から計算する。
どちらの曲線かで意味が異なる。そのため、それぞれ「AUC/ROC」「AUC-PR」「ROC曲線」「PR曲線」など、どちらの曲線かわかる呼び方をされるか、どちらでも正解(または不正解)になるような出題のされ方になることが予想される。

- **ROC曲線**: **Recall**(TPR)と**FPR**をプロットした図。
- **PR(Precision-Recall)曲線**: **Precision**と**Recall**をプロットした図。

陽性が極端に少ない場合など、**不均衡(負または正が極端に少ない偏ったデータ)データの場合、PR曲線**のほうが適している。

https://atmarkit.itmedia.co.jp/ait/articles/2211/24/news019.html

https://atmarkit.itmedia.co.jp/ait/articles/2212/05/news018.html

#### RMSE(Root Mean Squared Error)
評価指標として利用できる関数の一つ、二乗平均平方根誤差。
値が小さいほど、誤差が小さい。「予測モデルが安定して**小さい誤差で予測**をしているか」を表す指標。
分類ではなく、数値で予測する**回帰モデル**の評価に利用する。類似の関数で「MSE」もある

https://atmarkit.itmedia.co.jp/ait/articles/2105/24/news019.html

https://aiacademy.jp/media/?p=2500

#### MAE(Mean Absolute Error)
これも**回帰**問題の評価指標として利用できる関数の一つ、平均絶対誤差。
データセットに外れ値が含まれており、**外れ値が結果に大きな影響を与えてしまう場合**に適している。

https://atmarkit.itmedia.co.jp/ait/articles/2008/17/news031.html

その他にも「ランキング」や「CV」、「NLP」などに適した評価指標もあるらしい(出題されるかは不明)

https://towardsdatascience.com/20-popular-machine-learning-metrics-part-1-classification-regression-evaluation-metrics-1ca3e282a2ce

#### 目的に応じた評価指標の選択
モデル作成の際は、分析の目的に応じ、目標とする評価指標を選択する。
例えば、自動運転AIで自動ブレーキのための追突検知は誤検知をしてしまうと危険なため、検知漏れは許容し、誤検知の割合を減らす。など。

- 偽陽性(**誤検知**)を減らす: **Precision**
- 偽陰性(**検出漏れ**)を減らす: **Recall**
- 偽陽性or偽陰性(**誤り**)を減らす: **Accuracy**

誤検知を減らそうとすると「検出漏れ」が増え、検出漏れを減らそうとすると「誤検知」が増えることになりやすい。
また、不均衡データの場合、「正解率」が高くなりやすい。

こういった短所を補うため、これらを組み合わせた「F-measure」と「AUC」がある。

:arrow_down: の記事が非常にわかりやすかった。

https://tech.ledge.co.jp/entry/metrics

#### オーバーサンプリングとアンダーサンプリング
予測モデルのもとになるデータが**不均衡データ**(負または正が極端に少ない偏ったデータ)の場合、データ数をいずれかに合わせる(均衡化する)ことで予測精度を上げる。

https://qiita.com/tk-tatsuro/items/10e9dbb3f2cf030e2119

#### SMOTE(Synthetic Minority Over-sampling TEchnique)
オーバーサンプリングの手法の一つ。少ない方のデータをただ単にコピーするのではなく、**k-NN**アルゴリズムにより近傍にあるデータを用いる。

https://qiita.com/eigs/items/8ae0970afe188a1124d1

#### GAN(Generative Adversarial Network)
2つのニューラルネットワークを互いに競わせて入力データの学習を深めていく手法。
入力データの特徴を学習し、**擬似的なデータを生成**する事ができる。敵対的生成ネットワークとも呼ぶ。
不均衡データに対する**オーバーサンプリングにも**利用できる。

https://www.skillupai.com/blog/tech/mldl-tips-1/

#### ブートストラップサンプリング
学習にすべてのデータを利用するのではなく、**ランダムに一分のデータ**を取り出して学習する手法。

https://zero2one.jp/ai-word/bootslap-sampling/

#### OneHotエンコーディング
**カテゴリ列を0/1**の数値を値に持つ複数の列に変換する。
表形式データとしては冗長になるが、機械学習は数学的計算により予測を行うため、数値(バイナリ)のほうが都合がいい。
ただし、カテゴリ列の数やカテゴリの数が数十ある場合は大量の特徴ができてしまうため、適さない。この場合、「平均エンコーディング(mean encoding)」などを利用する。

| id | plan |
|:-:|:-:|
| 1 | standard |
| 2 | bussiness |
| 3 | enterprise |

:arrow_down: こうなる

| id | plan_standard | plan_bussiness | plan_enterprise |
|:-:|:-:|:-:|:-:|
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 |

https://pyming.info/2021/12/26/machine_learning_onehot/

#### テスト用データの分割
データセットはトレーニングにすべて利用するのではなく、**検証**(ハイパーパラメータのチューニング)、**テスト**(精度の確認)にも利用するため、
予め3つに分割する。通常は「80%:10%:10%」または「70%:15%:15%」の割合で分割する。
時系列予測の場合は「**シーケンシャル分割**」(順序を保ったまま分割)、そうでない場合「**ランダム分割**」を行う。

https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/splitting-types.html

その他にも、「K分割交差検証」に代表される「**交差検証**」によって、分割なしですべてのデータをトレーニングと検証に利用する手法もある。

#### K分割交差検証
**データセットを分割**し**複数個のモデルで複数回検証**することでトレーニングと検証にすべてのデータを利用する「交差検証」手法の一つ。
以下の手順でトレーニングと検証を行う。

1. データセットを**k個のサブセットに分割**する
1. それぞれの**k-1個のサブセットでトレーニング**を行い、**k個のモデル**を生成する
1. それぞれのモデルにトレーニングに利用していない**残り1個のサブセットで検証**を行う

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/b7de9421-a7bb-2a3e-3763-04675576ef64.png" width="50%" />

#### 相関
相関(correlation)とは、一方が変化すれば他方も変化するように相互に関係し合うこと。
散布図にすると以下の形になる。

①無相関、②非線形相関、③正の線形相関、④負の線形相関
<img src="https://upload.wikimedia.org/wikipedia/commons/a/ae/Correlation_types-Language-neutral.png"/>

出典元(Wikipedia):https://ja.wikipedia.org/wiki/%E7%9B%B8%E9%96%A2

#### 相関係数
相関係数とは、2変数間の**相関を示す尺度**。
単に「相関係数」と言った場合、通常「**ピアソンの積率相関係数**」を指す。
ピアソンの積率相関係数(PCC)は、2つのデータの"**線形関係**"の強さの尺度であり、**-1.0~1.0**の範囲の値を取り、**絶対値が大きい**ほど相関関係が強い。

#### スピアマンの相関係数
スピアマンの相関係数は**順位相関の尺度**。2つの"**ランク付けされた**"変数間の関連の強さと方向を測る。
2変数間に"**直線的な**"**相関関係がない**(非ガウス分布)の場合に利用する。

#### 正規分布(ガウス分布)
正規分布とは、"通常の"確率分布であり、データが平均値の付近に集積した左右対称な山なりの形になる。

<img src="https://upload.wikimedia.org/wikipedia/commons/7/74/Normal_Distribution_PDF.svg"/>

出典元(Wikipedia):https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83

#### リッジ回帰/ラッソ回帰
モデルの係数に**ペナルティを付ける**ことでモデルが**過学習しない**ように工夫した線形回帰モデル。
**リッジ(L2)回帰**はモデルの係数を減らすが**0にはならない**。
**ラッソ(L1)回帰**は一部のパラメータが**0になる**。複雑なモデルの過剰適合対策に適している。

https://k-dm.work/ja/basic/regression/ridge_and_lasso/

https://qiita.com/MA-fn/items/851f9fc50bda034cd5c6

#### Horovod
TensorFlow、Keras、PyTorch、ApacheMXNetを使用した"**分散型**"ディープラーニングトレーニング用のOSSフレームワーク。
既存のトレーニング処理をHorovodを利用した環境へ移行することで**分散処理**による**パフォーマンス向上**ができる。

### 分析結果の視覚化
機械学習で予測した結果は用途に応じてグラフなどで**視覚化**する場合が多い。
AWSの場合、QuickSightやKibanaなどを利用して視覚化することになる。

:arrow_down: QuickSightで利用できるビジュアルタイプ一覧

| ビジュアルタイプ | 説明 | イメージ |
|:-:|:-|:-:|
| 棒グラフ | 数値の**大きさの比較**に適している。一般的に時系列の場合は縦棒、**ランキング**や同じ月内のデータの比較などは横棒を利用する。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/barchart3.png" width="50%" /><img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/barchart5.png" width="50%" /> |
| ボックスプロット(箱ひげ図) | 最小値/最大値/中央値/第1四分位数(最小数と中央値の中間)/第3四分位数(最大数と中央値の中間)をプロットする。<br>**分布の比較**に利用する。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/box-plot-example.png" width="50%"/> |
| 円グラフ(ドーナツグラフ) | **割合**を視覚化する場合に適している。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/donut-chart.png" width="50%"/> |
| ファネルグラフ | **プロセスの中の各段階**ごとのデータを視覚化する。大きな値から徐々に小さくなっていくため漏斗のような形になる。(ファネル=漏斗) | <img src="https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2020/12/02/BDB-1194-1.jpg" width="50%"/> |
| ゲージグラフ | **進捗状況、達成率**などを視覚化するのに適している。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/gauge-chart-sample-1.png" width="50%"/> |
| ヒートマップ | 2つのディメンションを持つ行列データの**交点の値を色の濃淡で表現**する。**傾向と異常値**を表現するのに利用する。右の図の例だと「製品」と「国」を縦と横にとり、「どの国でどの製品が多く購入されているか」を視覚化している。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/heat-map-sample.png" width="50%"/> |
| ヒストグラム(度数分布図) | **連続した数値の分布**の視覚化に利用する。例えば年齢別の顧客数などを視覚化し、どの年齢層によりどのように変化していくかを見る。棒グラフとの違いとして、「連続した」というのがポイントで、「**順序を入れ替えてはいけない**」データの場合、ヒストグラムを利用する。左から右に年齢が徐々に上がっていく形にすることで、どの年齢から増減しているかなど、「**境界**」が見える。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/histogram-chart-sample-1.png" width="50%"/> |
| KPI | 目標値とそれに対する**進捗や割合**を視覚化する。<br>・ネットプロモータースコア(NPS):顧客が製品を友人に進める度合<br>・顧客収益性スコア(CPS):顧客から得られる利益<br>・コンバージョン率:実際の顧客になった割合<br>・相対的市場シェア:競合他社と比較して自社が占めている割合<br>・純利益率:純利益となる収益の割合<br>などに適している。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/kpi-sample.png" width="50%"/> |
| 折れ線グラフ | 時系列などの**連続的変化**を視覚化するのに適している。棒グラフでも表現できるが、右図のように複数の色をプロットする場合、折れ線のほうが同色の値の変化を追いやすい。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/example-visual-line-chart.png" width="50%"/> |
| 地理空間チャート | 各**場所**のデータの差異を視覚化する。塗り分けマップは色の濃淡で、ポイントマップはサークルのサイズで数値の大きさを表現する。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/filled-map3.png" width="50%"/><img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/point-map2.png" width="50%"/> |
| テーブル/ピボットテーブル | **表形式**データに対し、統計関数や集計を行う。単純な表(テーブル)もある。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/percent-of-total.png" width="50%"/> |
| サンキー図 | 工程間の**流量**を表現する。フローチャートのように各工程間の流れをみながら、線の太さによって表現される流れの量を確認できる。**エネルギー、物資、経費等の変遷**の視覚化に適している。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/sankey-diagram-4.png" width="50%"/> |
| 散布図(バブルチャート) | 1つのディメンションの複数の値を視覚化する。**2つまたは3つのデータの関係性**を調べるために利用する。2つの変数の場合はバブルの大きさは変えず、プロットする位置(縦軸横軸)で表現する。3つの変数の場合、3つめの変数をバブルの大きさで表現する。<br>**2つの場合**「**散布図**」、**3つの場合**「**バブルチャート**」と呼ぶ。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/example-modify-visuals12.png" width="50%"/> |
| ツリーマップ | 「**長方形の面積**」でデータの大きさを表現する。「地域と県」などの階層構造を視覚化するのに適している。 | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/6e9563f1-a8db-f040-6205-ba5223fc7db5.png" width="50%"/> |
| ウォーターフォールグラフ | 値が加算または減算されるときの連続的な合計を視覚化する。変化を表す**棒グラフに、棒と棒の間の増減を追加**したもの。期ごとの売上などの数値の変化とその**増減の根拠**を表すのに適している。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/waterfall-chart.png" width="50%"/> |
| ワードクラウド | データセット中に出現した**ワードの出現頻度**を文字の大きさで表現する。長文のテキストに対し、**大まかにどのような内容か**を視覚化できる。 | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/word-cloud.png" width="50%"/> |
| コンボグラフ | 傾向やカテゴリーなど**2つの異なるタイプのデータ**を1つのビジュアルにする。(折れ線グラフ+棒グラフなど) | <img src="https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/images/combo-chart-example1.png" width="50%"/> |

https://aws.amazon.com/jp/data-visualization/

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/working-with-visual-types.html

### データエンジニアリング
機械学習では収集したデータをそのままモデルの入力とすることはない。
モデルによる推論に適した形に**事前変換**を行う。この変換処理前のデータを「**rawデータ(生データ)**」という。
生データを分析のためのデータに変換するジョブや、蓄積するDWH(データウェアハウス)などの構築/管理などデータ分析基盤を整えることを「**データエンジニアリング**」という。

### 最適化アルゴリズム(Optimizer)
トレーニングの中で損失を減らすために最適化アルゴリズム(Optimizer)を利用する。

https://www.tech-teacher.jp/blog/algorithm-machine-learning/

https://qiita.com/omiita/items/1735c1d048fe5f611f80

### AWSの機械学習関連サービス
AWSで機械学習を利用するための手段は大きく3つに分けられる。

- **AI**サービス: 機械学習のためのほとんどのプロセスがすでに完了している状態、**予測(推論)をすぐに行える**。(SaaS)
- **ML**サービス: **独自の機械学習モデル**などを作成するための**プラットフォーム**が用意された状態。(PaaS)
- **MLフレームワーク・インストラクチャ**: **インフラ**としてAWSを利用し、機械学習の**プラットフォームはユーザが構築**する。(IaaS)

![スクリーンショット 2023-01-05 13.18.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/0d8722ac-2fdf-c987-1c7c-84ad25affa8b.png)

### Amazon SageMaker
機械学習のためのフルマネージドサービス。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/9089f372-314a-fa36-bb8d-7c06ff60ba69.png" alt="aws_panorama" width="40%" />

機械学習用の一連の**パイプライン**を制御する機能や大量データの**バッチ処理**での推論、リアルタイム推論のための**HTTPSエンドポイント**を提供するホスティング機能など様々な機能があり、データの前処理やモデルのトレーニングから推論のための環境(APIやバッチ)のデプロイまでの**一連の構築/管理**を行うことができる。

![スクリーンショット 2022-12-31 12.12.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/b3ee81c7-3bc5-cc35-3fcf-88ba9319adc8.png)

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/whatis.html

#### ストレージ
データセットのロード元として**S3やEBS、EFS、FSx**と統合されている。
FSxが最もロード時間が速くなる。

![スクリーンショット 2022-12-31 10.17.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/d287d758-6a05-7b31-c051-0321e574e218.png)

#### 組み込みアルゴリズム
SageMakerにはいくつかの組み込みアルゴリズムが用意されており、トレーニングジョブの作成時にアルゴリズムを選択する。
※組み込みアルゴリズム以外(サードパーティのサブスクリプションや独自アルゴリズム)も利用できる。

![スクリーンショット 2022-12-30 4.19.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/4e31c3c9-fce6-cff5-324e-6d59e5bc439d.png)

**組み込みアルゴリズム一覧**

| アルゴリズム | 特徴 | 説明 |
|:-:|:-|:-|
| AutoGluon-表形式分類 | ・教師あり<br>・分類and回帰<br>・アンサンブル<br>・表形式 | 表形式のデータセットから複数のモデルをアンサンブルするOSS |
| CatBoost | ・教師あり<br>・分類and回帰<br>・GBDT | 「勾配降下法(Gradient)」と「アンサンブル学習(Boosting)」、「決定木(Decision Tree)」の3つの手法を組み合わせた「勾配ブースティング決定木(Gradient Boosting Decision Tree: GBDT)」を実装したOSS |
| 因数分解機 | ・教師あり<br>・分類and回帰<br>・Factorization Machine(FM)<br>・表形式 | 分類タスクと回帰タスクの両方に使用できる汎用の教師あり学習アルゴリズム。クリック予測やレコメンデーションに適している。 |
| K最近傍(k-NN) | ・教師あり<br>・分類and回帰<br>・K近傍法<br>・表形式 | 予測データに近いk個の多数決によってクラスを推測する。クラス分類/回帰分析に利用できる。類似したアイテムを見つけるのに適している。 |
| LightGBM | ・教師あり<br>・分類and回帰<br>・GBDT |   |
| 線形学習(Linear Learner) | ・教師あり<br>・分類and回帰<br>・表形式 | 線形回帰または線形分類 |
| TabTransformer | ・教師あり<br>・分類and回帰 |   |
| XGBoost(eXtreme Gradient Boosting) | ・教師あり<br>・分類and回帰<br>・GBDT<br>・表形式 | GBDTを実装したOSS。回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できる。 |
| Object2Vec | ・教師あり<br>・分類and埋め込み<br>・表形式 | 単語に対するWord2Vec埋め込み手法を、文や段落などのより複雑なオブジェクトに対しても使用できるよう、汎用化したもの。 |
| DeepAR予測 | ・教師あり<br>・時系列予測 | 再帰型ニューラルネットワーク (RNN) を使用してスカラー (1 次元) 時系列を予測する |
| 主成分分析法(PCA) | ・教師なし<br>・次元削減 | データポイントを最初のいくつかの主成分に射影することにより、できるだけ情報を保持しつつデータセット内の次元(特徴の数)を縮退させる。回帰問題の次元削減に利用する。 |
| K-Means | ・教師なし<br>・クラスタリング | 類似のデータをグループ化する。k-NNに似ているが、こちらは教師なしのクラスタリング。 |
| IP Insights　| ・教師なし<br>・クラスタリング<br>・異常検出 | IPv4アドレスとIDなどの関連付けを学習し、異常なアクセスなどを予測する。 |
| ランダムカットフォレスト(RCF) | ・教師なし<br>・アンサンブル<br>・異常検出 | 突然のスパイク、周期性の中断など、データセット内の異常なデータポイントを検出する。 |
| BlazingText | ・テキスト分析<br>・分類and埋め込み | BlazingTextは単語ベクトルを生成する手法であるWord2Vecの実装。感情分析、名前付きエンティティ認識、機械翻訳など、多くの下流の自然言語処理（NLP）に利用できる。 |
| Sequence to Sequence(seq2seq) | ・教師あり<br>・テキスト分析(オーディオの入力可)<br>・ニューラルネットワーク | 機械翻訳、テキスト要約、speech-to-textに利用できる。 |
| 潜在的ディリクレ配分(LDA) | ・教師なし<br>・テキスト分類<br>・次元削減<br>・トピックモデル | 文書のトピック分類やマルチクラス分類問題の次元削減に利用できる。 |
| ニューラルトピックモデル(NTM) | ・教師なし<br>・テキスト分類<br>・トピックモデル | トピック抽出によるグルーピングや要約に利用する。 |
| イメージ分類-MXNet | ・教師あり<br>・画像処理 | 入力として画像を受け取り、ラベル付けを行う。 |
| イメージ分類-TensorFlow | ・教師あり<br>・画像処理 | 画像に対し、ラベルごとの確率を出力する。 |
| セマンティックセグメンテーション | ・教師あり<br>・画像処理 | イメージ内のすべてのピクセルに、事前定義された一連のクラスのクラスラベルを付ける。 |
| オブジェクトの検出 | ・教師あり<br>・画像処理 | 画像内のオブジェクトを検出及び分類する。 |

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/algos.html

その他の一般的なアルゴリズムも出題されそうなので一覧にしておく
| アルゴリズム | 特徴 | 説明 |
|:-:|:-|:-|
| ランダムフォレスト(RF) | ・教師あり<br>・分類and回帰 | ランダム化された決定木を複数使うバギングアルゴリズム。過学習になりづらく精度が高い。 |
| ロジスティック回帰 | ・教師あり<br>・回帰 | 線形回帰に似ているが、0~1のバイナリ出力を生成する。 |
| Word2Vec | ・教師あり<br>・テキスト分類 | テキストに対する感情分析や単語同士の足し引きができる。 |
| ナイーブベイズ | ・教師あり<br>・分類 | 「ベイズの定理」によって確率を求め、確率の最も高いものを結果として分類する。複数の独立変数に基づき分類を行うのに適している。<br>・多項ナイーブベイズ:特定の単語の頻度<br>・ベルヌーイナイーブベイズ:特定の単語が現れるかどうかを検出<br>・ガウスナイーブベイズ:連続値を処理する |
| 多変量回帰(Multivariate Regression Models) | ・回帰 | 多数の独立変数に基づいた相互関係を分析する |
| インスタンスセグメンテーション | ・教師あり<br>・画像処理 | セマンティックセグメンテーションと似ているが、物体検出の「個体ごと」の位置検出ができる。(セマンティックセグメンテーションではピクセル単位のため、各物体の個体性が失われる)画像内に複数の個体がある場合にそれぞれを検出できる。 |
| 再帰型ニューラルネットワーク(RNN) | ・教師なし ||
| 畳み込みニューラルネットワーク(CNN) | ・教師なし | 物体や顔、シーンを認識するために画像の中からパターンを見つけるのに特に有効。音声、時系列、信号データなど、画像以外のデータを分類にも利用できる。 |
| LSTM（Long Short-Term Memory/長・短期記憶) | ・教師なし | RNNの拡張。一連の話し言葉で機能し、文章など順序付けられた出力を生成する。 |
| 多層パーセプトロン(MLP) | ・教師なし<br>・分類and回帰<br>・表形式 | 古典的なニューラルネットワーク。1つまたは複数のニューロン層で構成される。 |
| T-SNE | ・教師なし<br>・次元削減 | 高次元のデータを2次元や3次元に変換する。 |
| サポートベクターマシン(SVM) | ・教師あり<br>・分類and回帰<br>・外れ値検出 | 分類、回帰、外れ値の検出に使用される一連の教師あり学習アルゴリズム。 |
| 自己回帰和分移動平均(ARIMA) | ・教師あり<br>・時系列 | 1つの時系列を使用してモデルをトレーニングする。(DeepARは複数の時系列を使用できる) |

#### パイプラインモード
ファイルモードではトレーニング開始前にEBSにデータをダウンロードするが、パイプラインモードを利用するとデータがアルゴリズムコンテナに**直接ストリーミング**されるため、トレーニングジョブが短縮される。また、使用するディスク容量も大幅に減る。

https://aws.amazon.com/jp/blogs/machine-learning/now-use-pipe-mode-with-csv-datasets-for-faster-training-on-amazon-sagemaker-built-in-algorithms/

#### RecordIO形式
トレーニングデータの形式にRecordIO形式を利用することで**パフォーマンスを向上**できる。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/cdf-training.html#cdf-recordio-format

#### モデルの更新
稼働中のSageMakerエンドポイントに対し、モデルの更新を行う場合、デプロイ時と同様`CreateEndpoint API`を利用する。
このとき、`ProductionVariant`(複数のバージョンを識別するもの)を新たに定義する。この際、`VariantWeight`を各モデルに割り当てることで、ルーティングするトラフィック量の重み付けを行うことができる。

<img src="https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/model-traffic-distribution.png" alt="sagemaker_variant" />

`InvokeEndpoint API`呼び出し時のパラメータとして`TargetVariant`を指定することで、`VariantWeight`を無視して特定のバージョンを呼び出すこともできる。

<img src="https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/model-target-variant.png" alt="sagemaker_variant" />

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/APIReference/API_CreateEndpointConfig.html

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/model-ab-testing.html

#### アクセス管理
SageMakerへのアクセス管理には**アイデンティティベース**のポリシーを利用する。(IAMユーザやグループに権限を付与する)
リソースベースのポリシー(エンドポイント側で制限)を設定する機能はない。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/security_iam_service-with-iam.html

#### SageMaker Autopilot
自動機械学習(AutoML)プロセスの主要タスクを**自動化**する機能。データを探索し、問題タイプに関連するアルゴリズムを選択して、モデルのトレーニングとチューニングを容易にするようにデータを準備する。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/autopilot-automate-model-development.html

#### ハイパーパラメータによる回帰と分類の指定
組み込みアルゴリズムの中で回帰/分類両方に対応しているアルゴリズムはハイパーパラメータによりいずれかのタイプを指定する。

| アルゴリズム | パラメータ名 | 値 |
|:-:|:-:|:-|
| 因数分類機 | predictor_type | ・`binary_classifier`:二項分類<br>・`regressor`:回帰<br>※指定必須 |
| K最近傍(k-NN) | predictor_type | ・`classifier`:分類<br>・`regressor`:回帰<br>※指定必須 |
| 線形学習 | predictor_type | ・`binary_classifier`:二項分類<br>・`multiclass_classifier`:複数クラス分類<br>・`regressor`:回帰<br>※指定必須 |
| XGBoost | objective | ・`reg:logistic`:二項分類<br>・`multi:softmax`:複数クラス分類<br>・`reg:squarederror`:回帰<br>※デフォルトは`reg:squarederror`<br>※その他は[公式README](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)参照 |

データ内のラベル数に基づきタイプを自動的に決定するものもある。
**評価指標**もタイプに基づき決定されるが、以下のパラメータによって指定もできる。

| アルゴリズム | パラメータ名 | 値 |
|:-:|:-:|:-|
| AutoGluon-表形式 | eval_metric | ・`root_mean_squared_error`:回帰用<br>・`roc_auc`:バイナリ分類用<br>・`accuracy`:複数クラス分類用<br>※デフォルトは`auto` |
| CatBoost | eval_metric | ・`RMSE`:回帰用<br>・`AUC`:二項分類用<br>・`MultiClass`:複数クラス分類用<br>※デフォルトは`auto`<br>※その他は[公式リファレンス](https://catboost.ai/en/docs/references/eval-metric__supported-metrics)参照 |
| LightGBM | metric | ・`rmse`回帰用<br>・`binary_logloss`二項分類用<br>・`multi_logloss`複数クラス分類用<br>※デフォルトは`auto` |
| XGBoost | eval_metric | ・`rmse`回帰用<br>・`error`分類用<br>・`map`ランク付け用<br>※デフォルトはタイプによって自動決定<br>※その他は[公式README](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)参照 |

#### ハイパーパラメータチューニング
モデルのハイパーパラメータとしてさまざまなバリエーションを試すことで、予測精度をあげる。
SageMakerではチューニング手法として以下を利用できる。

| 手法 | 特徴 |
|:-:|:-|
| ランダム検索 | パフォーマンスに影響を与えず最大数のトレーニングジョブを同時実行できる。 |
| ベイズ最適化 | 反復的にトレーニングジョブを実行する。ランダム検索より時間がかかるが、調整ジョブの実行はランダム検索より少なくなる。 |

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/automatic-model-tuning-how-it-works.html

#### Amazon SageMaker Ground Truth
データセットに対し**ラベル付け**するための機能。
「Ground Truth」は「現地調査で得た真実(Truth)の地上(Ground)検証データ」から転じて、「**正解データ**」を指す。
自社の従業員など特定のチームへ**ラベル付けワークフロー**を提供するか、Mechanical Turkによってラベル付け作業の依頼を公開する事ができる。

手動付与されたラベルから、アクティブラーニングにより一部のラベルを自動で付与する「**自動データラベリング**」もできる。

https://aws.amazon.com/jp/getting-started/hands-on/build-training-datasets-amazon-sagemaker-ground-truth/

#### SageMaker Elastic Inference(EI)
深層学習モデルからのリアルタイム推論取得を**高速化**できる。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ei.html

#### SageMaker Processing
データの前処理や後処理、モデルの評価といったワークロードをフルマネージドなインフラストラクチャの上で簡単に実行する機能。
`PySparkProcessor`, `SparkJarProcessor`, `SKLearnProcessor`のいずれかを利用し、Pythonで処理を記述する。

https://aws.amazon.com/jp/blogs/news/amazon-sagemaker-processin-fully-managed-data-processing-and-model-evaluation/

https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_processing.html

#### SageMaker Data Wrangler
データの前処理と特徴量エンジニアリングを簡単に行うための機能。
データの変換や特徴の視覚化などができる。

<img src="https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/mohave/histogram.png" width="50%" />

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/data-wrangler.html

次元削減や欠損値の補完などの組み込みの変換や、`PySpark`, `Pandas`, `PySpark SQL`を利用したカスタム変換ができる。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/data-wrangler-transform.html

#### SageMaker Feature Store
機械学習アルゴリズムのトレーニングのために、rawデータを特徴に変換するのに必要な、反復的なデータ処理とキュレート作業を削減することで、このプロセスを高速化する。

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

https://aws.amazon.com/jp/blogs/machine-learning/using-streaming-ingestion-with-amazon-sagemaker-feature-store-to-make-ml-backed-decisions-in-near-real-time/

#### SageMakerとQuickSightの統合
QuickSightのデータソースとして、直接SageMakerを利用することはできない。
SageMaker統合機能(**Augment with SageMaker**)を利用し、データセットを**MLモデルで拡張**することができる。
この機能を利用するためには、「**QuickSight Enterprise Edition**」を利用していることと**スキーマを定義するJSONファイル**の準備が必要となる。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/sagemaker-integration.html

#### QuickSight ML Insights
QuickSightには機械学習を使用して、データ内の隠されたインサイトや傾向をダッシュボードに反映する機能がある。
機械学習インサイトは以下の3つの主要機能を持つ。

- MLを使用した**異常検出**: データを継続的に分析し**異常** (外れ値) を検出
- MLを使用した**予測**: 内蔵の機械学習Random Cut Forestアルゴリズムにより、外れ値を除く季節性や傾向の検出、欠損値の入力など、複雑な現実のシナリオを自動的に処理し**変化を予測**する。
- **自動ナラティブ**(説明文): ダッシュボードに自動的に生成した**説明文**を追加してくれる。

https://dev.classmethod.jp/articles/amazon-quicksight-announces-general-availability-of-ml-insights/

#### Scikit-learn
Scikit-learn(サイキット・ラーン)はPythonのOSS機械学習ライブラリ。
**データの前処理**などに利用する。
SageMakerではScikit-learnの実行環境となるコンテナが用意されている。

https://dev.classmethod.jp/articles/sagemaker-sklearn/

##### 特徴量のスケーリング
特徴量間でスケールの差があるとうまく学習できなかったり、パフォーマンス低下につながる。
そのため、前処理として**スケール変換**を行う。

Scikit-learnの場合、以下のクラスを利用する。

- **MinMaxScaler**: **正規化**(normalization)を行う。値の範囲を0~1または-1~1の範囲に収める。k-NNやニューラルネットワークなどに利用する。
- **StandardScaler**: **標準化**(standardization)を行う。平均を0、分散を1にする。外れ値に対しても平均化するため、**外れ値**への対処などに利用する。

https://aizine.ai/preprocessing0614/

##### 特徴量のエンコーディング
文字として登録されているカテゴリ列は前処理で数値に変換する必要がある。

Scikit-learnの場合、以下のクラスを利用する。

- **OneHotEncoder**: カテゴリを**複数のバイナリ**(0/1)列に変換する
- **OrdinalEncoder**: **順序性**のあるカテゴリ(L>M>Sなど)を数値に変換する
- **LabelBinarizer**: Y/NやT/Fなどの二値のラベルを**1列のバイナリ**(0/1)に変換する※3つ以上の値がある場合、OneHotと同じように複数列になるが用途としては二値の列に利用するほうがおそらく正しい

##### 欠損値の補完
Scikit-learnで欠損値を補完する場合、以下のクラスを利用する。

- **SimpleImputer**: 平均値/中央値/最頻値/固定値など簡単な方法で補完する
- **KNNImputer**: k-NNにより欠損値を補完する

その他のクラスについては公式リファレンス参照

https://scikit-learn.org/stable/modules/classes.html

#### Spark ML
Sparkには**MLlib**という機械学習ライブラリが付属している。
また、**MLeap**という機械学習パイプライン用のOSSがある。

SageMakerではこのMLeapの実行環境となるコンテナが用意されている。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/inference-pipeline-mleap-scikit-learn-containers.html

#### Amazon Kinesis Data Analytics
ストリーミングデータに対して、**SQL**や**Python**や**Java**などのアプリケーションによる**リアルタイムの分析**や**データ変換**を行える。
問題文で「**リアルタイムで~**」というワードが出てきたらKinesisが正解になる可能性が高い。

SQL実行用の「**Kinesis Data Analytics for SQL Applications**」と「**Apache Flink**」(ストリーミングデータ処理用のOSSフレームワーク)を利用したアプリケーション実行用の「**Kinesis Data Analytics for Apache Flink**」の2種類ある。

https://docs.aws.amazon.com/ja_jp/kinesisanalytics/latest/dev/what-is.html

https://docs.aws.amazon.com/ja_jp/kinesisanalytics/latest/java/what-is.html

「for SQL」では、以下の組み込み関数を利用して機械学習クエリを実行することもできる。

- データ**異常の検出** (**RANDOM_CUT_FOREST** 関数)
- データ**異常の検出と説明の取得** (**RANDOM_CUT_FOREST_WITH_EXPLATION** 関数)
- **ホットスポット**の検出 (**HOTSPOTS** 関数)

https://docs.aws.amazon.com/ja_jp/kinesisanalytics/latest/dev/examples-machine.html

Kinesisストリームに対する処理を行うためのサービスのため、**入力元と出力先**は「Kinesis Data Stream」もしくは「Kinesis Data Firehose」になる。
※「for Flink」ではS3へAvroまたはParquetファイルの出力もできる。

#### EMRによるApache Spark Streaming
リアルタイムのデータ処理に利用できるKinesis Data Analytics以外の方法として、「Apache Spark Streaming」がある。
Kinesis Data Analyticsに比べると、**構築/管理のコストが掛かる**代わりに、**大規模データセット**に対する分散処理によるハイパフォーマンスな**リアルタイム処理**を実現できる。

https://aws.amazon.com/jp/solutions/implementations/real-time-analytics-spark-streaming/ 

#### AWS Glue
サーバーレス**データ統合**サービス、ETLやクローラなどデータ統合のための複数の機能を持つ。

![glue](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/7fc721b9-4202-59a2-3696-36c2a42e63ad.png)

:arrow_down: Glueの主な機能

| 機能 | 説明 |
|:-:|:-|
| ETLジョブ | フォーマット変換、データ結合などを行いながらDBやストレージ間でデータのコピーを行う |
| データカタログ | データソースにどのようなデータが入っているか(データのスキーマなど)をカタログ化する |
| クローラ | データレイクをクローリングし、スキーマデータを自動で判断し、データカタログにメタデータを作成する |
| ワークフロー | ETLジョブ、クローラ、データカタログなどの一連の処理を自動化する |
| Glue Studio | ETL ジョブの作成、実行、監視を容易にする視覚的なインターフェース |
| Glue DataBrew | 分析および機械学習のためのビジュアライズツール<br>TB〜PBクラスのデータに対して、クレンジングと正規化を直接実行 |
| Glue Elastic Views | 複数のデータソースにまたがるマテリアライズドビューを作成(プレビュー中のため試験範囲外) |
| Glue Data Quality | ルールに従いデータの品質を解析、検知する(プレビュー中のため試験範囲外) |

※その他にも`Glue Interactive Sessions`、`Glue for Ray`、`Glue Flex`などあるがおそらく試験範囲外

https://aws.amazon.com/jp/glue/features/

https://dev.classmethod.jp/articles/re-introduction-2022-aws-glue/

##### クローラー
データレイクからDWH(データウェアハウス)やDM(データマート)を構築するにあたり、クローラーを利用して**スキーマを自動定義**できる。
クロールできる対象データストアは以下。

- S3
- DynamoDB
- Delta Lake
- MySQL(RDS、Redshit、その他RDB)
- MongoDB(DocumentDB、その他MongDB)

クローラーは

1. データの分類
1. テーブルまたはパーティションにグループ化
1. メタデータをデータカタログに書き込み

の順で処理を行う。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-crawler.html

###### クローラーの分類子
クローラーは、まずはじめにデータを「分類」する。

クローラーには事前に対象データの**フォーマットを識別するための定義**「分類子」を追加できる。複数の分類子を指定すると優先順位順にデータを認識可能か試行してくれる。
組み込みの分類子として「Avro」「Parquet」「JSON」「XML」「CSV」などが指定できる他、「Grok」と呼ばれる正規表現による解析なども指定できる。

分類子は`certainty(確実性)`という`0.0`~`1.0`の値を返す。`certainty=1.0`は正しいスキーマを100%確実に作成できることを指すため、この値が帰った時点でその分類子の出力を利用する。
`1.0`を返す分類子がなかった場合、最も`certainty`が高い分類子の出力を利用する。どの分類子からも`0.0`以上が返されない場合、`UNKNOWN`のデフォルト分類文字列を返す。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-classifier.html

##### クローラーの包含パターンと除外パターン
クローラーのプロパティとしてクロール対象に含める、または除外するパスを指定できる。
包含(インクルード)パスとして、DBの場合「**DB名/テーブル名**」S3の場合「**バケット名/キープレフィックス**」を指定する。
除外(エクスクルード)パスは包含(インクルード)パスに対する相対指定(インクルード→エクスクルードの順に判定)となる。
除外(エクスクルード)パスには`glob`パターンを指定できる。

- `*`: ワイルドカード(0文字以上、フォルダの境界を超えない)
- `**`: ワイルドカード(0文字以上、フォルダの境界を超える)
- `?`: ワイルドカード(1文字)
- `\`: エスケープ
- `[]`: 含める文字列、先頭に`!`で否定(例: `[a-z]`でアルファベット小文字すべて、`[!ace]`で`a`,`c`,`e`以外すべての文字列)
- `{}`: サブパターン(例: `*.{csv,avro}`で`.csv`または`.avro`で終わるオブジェクト)

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude

##### ETL
複数のデータストア間でデータの**変換や抽出**を行うことができる。
データストアとしては、DynamoDB、S3、RDB、Kinesisなどを指定できる。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-connect.html

入出力できるデータ形式は以下※出力はできないものもある

| 形式 | 入力 | 出力 |
|:-:|:-:|:-:|
| CSV | ◯ | ◯ |
| Parquet | ◯ | ◯ |
| Avro | ◯ | ◯ |
| ORC | ◯ | ◯ |
| XML | ◯ | ✕ |
| grolLog | ◯ | ✕ |
| Ion | ◯ | ✕ |
| JSON | ◯ | ✕ |

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-format.html

##### FindMatches
GlueのETLには`FindMatches`という機械学習によるカスタム変換機能がある。
完全一致しないレコード(少しのスペルの違いなど)も**ファジーマッチングによる重複削除や突合**などができる。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/machine-learning.html 

https://dev.classmethod.jp/articles/yoshim_glue_ml_transform_tutorial/

#### Amazon Machine Learning
Amazonの機械学習プラットフォームサービス、廃止予定のサービスのため現在は**更新が終了**しており、SageMakerへの移行が推奨されている。(その割に公式模試の解説ではAmazon MLのドキュメントへのリンクがあったりする)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/5cbdcba0-64ce-6039-f1f6-4efbaa46bd3f.png" alt="amazon_machine_learning" width="40%" />

![スクリーンショット 2022-12-30 4.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/3b0cdaa9-7273-0b95-02e6-852695df846c.png)

https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/what-is-amazon-machine-learning.html

#### AWS Panorama
**既存のカメラデバイス**で**コンピュータビジョン**(CV)アプリケーションを実行できるようにする。
※CV=画像や動画から物体や人物を識別するなどの処理
SageMakerやサードパーティの機械学習モデルを利用できる。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/9783aec6-6704-c04a-604d-6a0f4cae4746.png" alt="aws_panorama" width="50%" />

<img src="https://docs.aws.amazon.com/ja_jp/panorama/latest/dev/images/sample-app.png" alt="aws_panorama_architecture" />

専用のデバイスや互換デバイス上でSDKを実行する事により、メトリクスなどをAWSへ送信する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/67914aaf-748a-66eb-563b-0ab46ba7865d.png" alt="panorama_appliance" width="30%" />

https://dev.classmethod.jp/articles/preview-release-aws-panorama-appliance/

#### AWS IoT Greengrass
AWS IoTの機能を**エッジデバイス**で実行できる。
通信状況の悪い環境での利用や、通信量の節約に利用できる。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140013/9316d403-56c4-83b9-5709-462e4a6f8eb2.png" alt="aws_iot_greengrass" width="30%" />

https://dev.classmethod.jp/articles/re-introduction-iot-2021-aws-iot-greengrass-v1/

#### AWS IoT Analytics
IoTから収集したデータに対する分析を行うためのサービス。
収集したデータに対する**SQLによるアドホッククエリ**、Jupyter　Notebookによる**スクリプト実行**、**S3への出力**などができる。**QuickSightとも統合**されており、分析結果を簡単に視覚化できる。

https://docs.aws.amazon.com/ja_jp/iotanalytics/latest/userguide/explore-data.html

https://dev.classmethod.jp/articles/re-introduction-iot-2021-aws-iot-analytics/

#### AWS IoT SiteWise
産業用機器からデータを大規模に収集、モデル化、分析、視覚化することができるマネージドサービス。

https://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/what-is-sitewise.html

#### Amazon Rekognition
深層学習を用いた**画像/動画分析**を行うためのAIサービス。

https://dev.classmethod.jp/articles/emotion-analysis-with-face-detection-of-images-with-amazon-rekognition/

#### Amazon Comprehend
機械学習を利用した**自然言語処理（NLP）**により、テキストから**キーフレーズの検出**や**感情の判定**などを行うAIサービス。
シンプルなテキスト分析の場合、SageMakerを利用するよりも簡単に実行できる。

https://aws.amazon.com/jp/builders-flash/202107/awsgeek-comprehend/?awsf.filter-name=*all

https://dev.classmethod.jp/articles/add-japanese-analyzing-on-comprehend/

#### Amazon Translate
深層学習を用いたニューラル**機械翻訳**サービス。
テキストファイルに対する**バッチ翻訳**とテキストデータに対する**リアルタイム翻訳**ができる。

https://dev.classmethod.jp/articles/re-introduction-2020-amazon-translate/

#### Amazon Transcribe
機械学習モデルを用いた音声からの**文字起こし**(STT:Speech-To-Text)サービス、S3の**音声ファイル**からテキストを出力したり、WebSocketによる**ストリーミング**での文字起こしができる。
「**音声からの文字起こし**(Transcript)」をしてくれる「**書記**(Scribe)」で「**Transcribe**」？？

https://docs.aws.amazon.com/ja_jp/transcribe/latest/dg/what-is.html

#### Amazon Polly
深層学習を用いた**テキスト読み上げ**(TTS:Text-To-Speech)サービス。
「Polly」はオウムによくつけられる名前。おしゃべりするAIなので「Polly」。

https://dev.classmethod.jp/articles/trying_out_amazon_polly_ai_voice_by_hugo_obuchi/

#### Amazon Textract
**画像ファイル**からの**文字起こし**を行うAIサービス。
画像から「**文章**(Text)」を「**抽出**(Extract)」するので「**Textract**」？？
2023/01時点では東京リージョン未対応。

https://www.ctc-g.co.jp/solutions/cloud/column/article/43.html

#### Amazon Forecast
機械学習による時系列予測を提供するAIサービス。そのまんま「**Forecast**」=「**予測**」

https://qiita.com/JJ33/items/582a2fc37ce267286dce

#### Amazon Personalize
パーソナライズ(=個人に最適化)された**レコメンデーション**(=おすすめ)を提供するためのAIサービス。

https://dev.classmethod.jp/articles/personalize-ga/

#### Amazon Lex
音声とテキストを使用して、会話型インターフェイスを任意のアプリケーションに構築するためのサービス。自然言語**チャットボット**の開発に利用できる。
Alexaに利用されているものと同様のAI技術が利用されている。「**Alexa**」のまんなか(中身)をとって「**Lex**」？？

https://qiita.com/hayao_k/items/268c333f3f383125fd30

#### Amazon Sumerian
ブラウザベースの 3D、拡張現実 (AR)、仮想現実 (VR) アプリケーションを簡単に作成し実行するためのサービス。
現在は Babylon.js + AWS Amplifyへの移行を推奨しており、新規のリソース作成はできない。

https://aws.amazon.com/jp/sumerian/faqs/

https://dev.classmethod.jp/articles/0702diveintovrworld/

#### Amazon Kendra
機械学習を利用した、自然言語によるドキュメント検索サービス。
取り込んだドキュメントに対し、質問形式で検索を行うことができる。
以下のファイル(またはテキスト)に対応している。

- CSV形式の「よくある質問と回答」
- HTMLファイル
- Microsoft PowerPointプレゼンテーション
- Microsoft Wordドキュメント
- プレーンテキストドキュメント
- PDFファイル

※1ファイルから抽出されるテキストは5MBまでの制限がある。

「Kendra」は女性の名前、文書を見つけてくれる「ケンドラ」さん。
2023/01現在は東京リージョンには対応していない。(日本語には対応している)

https://docs.aws.amazon.com/ja_jp/kendra/latest/dg/what-is-kendra.html

https://www.idnet.co.jp/column/page_204.html

#### Amazon Fraud Detector
機械学習により不正行為の可能性をオンラインで検出する完全マネージド型の不正検出サービス。
オンライン支払い詐欺や偽アカウントの作成など、不正の可能性があるオンラインアクティビティを簡単に識別できるようにする。
「**詐欺(Fraud)**」を「**検出(Detect)**」する。

2023/01現在は東京リージョンには対応していない。

https://docs.aws.amazon.com/ja_jp/frauddetector/latest/ug/what-is-frauddetector.html

#### Amazon Augmented AI(A2I)
機械学習の予測結果を人の目でチェックするワークフローを構築/管理できる。
Gound Truthと同じく、自社内のワーカーや「Mechanical Turk」によるチェックプロセスを設定できる。

https://dev.classmethod.jp/articles/released-amazon-augmented-ai/

#### その他
なんとなく紛らわしいやつ

- センチメント(sentiment)： 感情
- センテンス(sentence)： 文章
- セマンティック(semantic)： 意味