目次
Amazon Lookout for Metrics v2.0 完全ガイド(AI/ML - Analytics)
初心者から実務者向けの包括的解説
Amazon Lookout for Metrics は、ビジネスメトリクス(売上、コンバージョン率、広告効果など)の異常を機械学習で自動検知し、根本原因を自動分析するマネージドサービスです。季節性・トレンドを考慮した上での異常検知と、ディメンション別の根本原因分析により、ビジネスリスクを早期発見します。
⚠️ End of Support Notice: Amazon Lookout for Metrics は 2025年10月10日をもってサポート終了予定です。詳細参照。
目次
- 概要
- Lookout for Metrics が解決する課題
- 主な特徴
- アーキテクチャ
- コアコンポーネント
- 時系列異常検知の仕組み
- 根本原因分析(RCA)
- ワークフロー
- データソース統合
- 異常検知ルール
- アラート・通知
- 主要ユースケース
- CloudWatch Anomaly Detection との比較
- 他分析サービスとの比較
- セキュリティとコンプライアンス
- コスト分析
- マイグレーション戦略
- ベストプラクティス
- トラブルシューティング
- End of Support Notice
- まとめ
概要
Lookout for Metrics とは
「ビジネス KPI の異常を自動検知し根本原因を分析するサービス」 で、以下の特徴があります:
- 自動異常検知: 季節性・トレンドを学習した上での真の異常検出
- 根本原因分析: 異常が発生したディメンション(地域、商品、ユーザーセグメント)を自動特定
- 複数データソース対応: S3、Redshift、RDS、SaaS(Salesforce、Marketo など)
- ビジネス用語対応: 「売上」「CTR」など非技術的な指標名をサポート
- アラート・通知: SNS / Webhook で自動通知
選ぶべき理由
以下のいずれかに該当すれば Lookout for Metrics は最適:
- ビジネス KPI(売上、コンバージョン率)の異常を自動検知したい
- CloudWatch Alarms の閾値では誤アラートが多い
- 異常の根本原因をデータドリブンに特定したい
- ビジネスチーム(非技術者)が自分で設定・運用したい
- Salesforce / Marketo など SaaS データを直接分析したい
Lookout for Metrics が解決する課題
| 課題 | 従来の方法 | Lookout for Metrics |
|---|---|---|
| 閾値設定 | 手動で固定値(季節性無視) | ML が自動学習 |
| 誤アラート | 正常な変動で頻繁にアラート | 季節性・トレンド考慮 |
| 根本原因特定 | データアナリストが手動分析 | 自動ディメンション分析 |
| 分析時間 | 数時間〜数日必要 | リアルタイム |
| 対応速度 | 通知から原因把握まで遅延 | 即座に対応可能 |
| 複数メトリクス | 個別に設定・監視 | 一括管理 |
| ビジネス用語 | 技術的な指標名のみ | 「売上」「CTR」など対応 |
主な特徴
✅ 季節性・トレンド学習
売上データ(年単位):
├─ トレンド: 毎年 5% 成長
├─ 週次パターン: 金曜日が 30% 高い
├─ 月次パターン: 月初が 10% 高い
└─ 季節性: 12 月が 200% ピーク
→ これらを全て考慮した上での異常検知
✅ ディメンション別分析
売上異常が発生
↓
根本原因分析(RCA)
├─ 地域別: 「西日本」「関東」で低下
├─ 商品別: 「スマートフォン」「タブレット」で低下
└─ ユーザーセグメント別: 「新規ユーザー」「企業向け」で低下
→ 「西日本」「スマートフォン」「新規ユーザー」の組み合わせが原因
✅ 複数データソース統合
Redshift(ERP データ)
↓
RDS(マーケティング DB)
↓
Salesforce(営業データ)
↓
S3(カスタムデータ)
↓
→ 全て統合して多次元異常検知
✅ ノーコード設定
- Web UI で SQL 不要
- ビジネスユーザーでも設定可能
アーキテクチャ
データソース
├── Amazon Redshift(DWH)
├── Amazon RDS / Aurora(RDBMS)
├── Amazon S3(Data Lake)
├── Salesforce(CRM)
├── Marketo(Marketing Auto)
└── Zendesk(サポートシステム)
↓
Lookout for Metrics
├── メトリクス定義(SQL 自動生成)
├── 異常検知エンジン(ML)
└── 根本原因分析エンジン(RCA)
↓
異常・根本原因
↓
SNS / Webhook
↓
├── Email(ビジネスユーザー)
├── Slack / Teams
└── カスタム REST API
コアコンポーネント
1. Detector(異常検知器)
import boto3
client = boto3.client('lookoutmetrics')
# Detector 作成
response = client.create_anomaly_detector(
AnomalyDetectorName='sales-anomaly-detector',
AnomalyDetectorDescription='Daily sales anomaly detection',
# メトリクス定義(複数可)
AnomalyDetectorConfig={
'AnomalyVectorLength': 3 # 複数メトリクスを同時分析
}
)
detector_arn = response['AnomalyDetectorArn']
2. Metric(メトリクス定義)
# メトリクスを追加
response = client.put_metric_set(
AnomalyDetectorName='sales-anomaly-detector',
MetricSetName='daily_sales',
MetricSetDescription='Daily sales by region and product',
MetricList=[
{
'MetricName': 'total_revenue',
'AggregationFunction': 'SUM'
},
{
'MetricName': 'order_count',
'AggregationFunction': 'SUM'
},
{
'MetricName': 'conversion_rate',
'AggregationFunction': 'AVERAGE'
}
],
# ディメンション(分析軸)
DimensionList=[
'region', # 地域別
'product_category', # 商品別
'device_type' # デバイス別
],
# データソース接続
MetricSource={
'RedshiftSource': {
'RoleArn': 'arn:aws:iam::account:role/LookoutMetricsRole',
'DBIdentifier': 'redshift-cluster-1',
'DatabaseUser': 'admin',
'ClusterIdentifier': 'default',
'TableName': 'daily_sales_metrics',
# SQL で動的に計算
'HostedZoneId': 'arn:aws:redshift:region:account:cluster:cluster-id'
}
},
# メトリクス取得時刻
TimestampColumn={
'ColumnName': 'date_utc',
'ColumnFormat': 'yyyy-MM-dd\'T\'HH:mm:ss\'Z\''
},
# 分析頻度
Frequency='DAILY' # DAILY / WEEKLY / MONTHLY など
)
3. AnomalyGroup(異常グループ)
# 検知された異常を取得
response = client.list_anomaly_groups_by_metric(
AnomalyDetectorName='sales-anomaly-detector',
MetricSetName='daily_sales',
Limit=10
)
for group in response['AnomalyGroupList']:
print(f"異常グループ ID: {group['AnomalyGroupId']}")
print(f"異常スコア: {group['AnomalyGroupScore']:.2%}")
print(f"検知時刻: {group['StartTime']}")
print(f"ディメンション:")
for dim in group['DimensionList']:
print(f" {dim['DimensionName']}: {dim['DimensionValue']}")
4. Alert(アラート)
# アラート設定
response = client.create_alert(
AlertName='sales-critical-alert',
AlertSensitivityThreshold=70, # 異常スコア 70% 以上でアラート
AnomalyDetectorArn=detector_arn,
# SNS 通知
Action={
'SNSConfiguration': {
'RoleArn': 'arn:aws:iam::account:role/SNSPublishRole',
'SnsTopicArn': 'arn:aws:sns:region:account:sales-alerts'
}
}
)
時系列異常検知の仕組み
LSTM オートエンコーダー
正常データ(過去 1 年)
↓ Encoder(LSTM)
→ 潜在表現(低次元)
↓ Decoder(LSTM)
→ 復元データ
↓
復元誤差(Reconstruction Error)が異常スコア
正常データ:
誤差 < 閾値 → IsAnomaly = false
新規異常:
誤差 > 閾値 → IsAnomaly = true
季節分解(Seasonal Decomposition)
売上時系列 = トレンド + 季節性 + 周期性 + ノイズ
例: 2025-04-27 の売上が異常か判定
過去データ分析:
トレンド: 毎年 +5% 成長 → 2025-04 は前年比 +5% を予期
季節性: 4 月は平均 1000 万 → 2025-04 は 1000 万 ± 100 万を予期
週次パターン: 日曜日は 30% 高い → 2025-04-27(日曜)は +30% 予期
予期値: 1050 万 × 1.30 = 1365 万
実績値: 900 万
→ 異常スコア = (900 - 1365) / 1365 = 34% 低下 → IsAnomaly = true
根本原因分析(RCA)
ディメンション別ドリルダウン
異常検知: 売上が 30% 低下
RCA エンジン:
├─ 地域別分析
│ ├─ 東日本: -5%(ほぼ正常)
│ ├─ 西日本: -50%(大幅低下)← 主要原因
│ └─ 九州: -10%(小幅低下)
│
├─ 商品別分析
│ ├─ スマートフォン: -60%(大幅低下)← 主要原因
│ ├─ タブレット: -20%
│ └─ PC: +5%(増加)
│
└─ ユーザーセグメント別
├─ 新規ユーザー: -80%(大幅低下)← 主要原因
├─ 既存ユーザー: -5%(ほぼ正常)
└─ VIP: 0%(変化なし)
結論:
西日本 × スマートフォン × 新規ユーザー の組み合わせで売上が大幅低下
→ マーケティングチームは「新規ユーザー向けスマートフォン広告」を確認
→ AWS の SageMaker 学習ジョブが失敗して推奨広告が配信されていなかった
ワークフロー
フェーズ 1: データソース接続(1 日)
# データソース認証
response = client.create_anomaly_detector(
AnomalyDetectorName='sales-detector',
AnomalyDetectorConfig={}
)
# Redshift 接続設定
response = client.put_metric_set(
AnomalyDetectorName='sales-detector',
MetricSetName='daily_sales',
MetricSource={
'RedshiftSource': {
'RoleArn': 'arn:aws:iam::account:role/LookoutMetricsRole',
'ClusterIdentifier': 'default',
'DatabaseUser': 'admin',
'TableName': 'fact_sales'
}
}
)
フェーズ 2: メトリクス定義(1-3 日)
# ビジネスチームとの打ち合わせ
# 監視対象メトリクス:
# 1. Daily Revenue(日次売上)
# 2. Order Count(注文数)
# 3. Conversion Rate(コンバージョン率)
# 4. AOV(平均購買額)
response = client.put_metric_set(
AnomalyDetectorName='sales-detector',
MetricSetName='daily_sales',
MetricList=[
{
'MetricName': 'revenue',
'AggregationFunction': 'SUM'
},
{
'MetricName': 'order_count',
'AggregationFunction': 'SUM'
},
{
'MetricName': 'conversion_rate',
'AggregationFunction': 'AVERAGE'
},
{
'MetricName': 'aov',
'AggregationFunction': 'AVERAGE'
}
],
DimensionList=['region', 'product_category', 'device_type']
)
フェーズ 3: 学習期間(7-30 日)
- 新規 Detector の場合:
- → 最少 7 日分のデータで学習開始
- → 30 日(1 ヶ月)で十分な精度達成
- → 3-12 ヶ月で高精度
フェーズ 4: アラート設定(1 日)
# 感度設定(0-100)
response = client.create_alert(
AlertName='sales-critical',
AlertSensitivityThreshold=70, # 高感度
AnomalyDetectorArn='arn:aws:lookoutmetrics:...',
Action={
'SNSConfiguration': {
'RoleArn': 'arn:aws:iam::account:role/SNSRole',
'SnsTopicArn': 'arn:aws:sns:region:account:sales-alerts'
}
}
)
フェーズ 5: 運用監視(継続)
- ① 日次でアラート確認
- ② 根本原因レポートをビジネスチームと共有
- ③ 月次でメトリクス精度をレビュー
- ④ 異なるビジネスシナリオに応じてメトリクス追加
データソース統合
Redshift
response = client.put_metric_set(
AnomalyDetectorName='detector',
MetricSetName='redshift_metrics',
MetricSource={
'RedshiftSource': {
'RoleArn': 'arn:aws:iam::account:role/LookoutMetricsRole',
'ClusterIdentifier': 'redshift-prod',
'DatabaseUser': 'analytics',
'TableName': 'daily_metrics'
}
}
)
RDS / Aurora
response = client.put_metric_set(
AnomalyDetectorName='detector',
MetricSetName='rds_metrics',
MetricSource={
'RDSSourceConfig': {
'DBInstanceIdentifier': 'prod-mysql-db',
'DatabaseUser': 'analytics',
'RoleArn': 'arn:aws:iam::account:role/LookoutMetricsRole',
'SecretManagerArn': 'arn:aws:secretsmanager:region:account:secret:rds-pwd',
'TableName': 'marketing_metrics'
}
}
)
S3
response = client.put_metric_set(
AnomalyDetectorName='detector',
MetricSetName='s3_metrics',
MetricSource={
'S3SourceConfig': {
'RoleArn': 'arn:aws:iam::account:role/LookoutMetricsRole',
'TemplatedPathList': [
's3://my-bucket/metrics/2025-04-{YYYY}-{MM}-{DD}.csv'
]
}
}
)
Salesforce
response = client.put_metric_set(
AnomalyDetectorName='detector',
MetricSetName='salesforce_metrics',
MetricSource={
'SalesforceSourceConfig': {
'RoleArn': 'arn:aws:iam::account:role/LookoutMetricsRole',
'SecretManagerArn': 'arn:aws:secretsmanager:region:account:secret:salesforce-oauth',
'DatabaseUrl': 'https://yourinstance.salesforce.com',
'Object': 'Opportunity',
'MetricQuery': 'SELECT Id, Amount, CloseDate FROM Opportunity'
}
}
)
異常検知ルール
感度調整
# 低感度(false positive 削減、見落とし増)
response = client.create_alert(
AlertName='conservative-alert',
AlertSensitivityThreshold=90 # 異常スコア > 90% のみ通知
)
# 中感度(バランス)
response = client.create_alert(
AlertName='balanced-alert',
AlertSensitivityThreshold=70
)
# 高感度(見落とし削減、false positive 増)
response = client.create_alert(
AlertName='aggressive-alert',
AlertSensitivityThreshold=50
)
時間別フィルタリング
# 営業時間のみアラート(非営業時間の異常は無視)
response = client.create_alert(
AlertName='business-hours-only',
AlertSensitivityThreshold=70,
# Lookout for Metrics では実装されていないが、
# Lambda で実装可能:
# if hour < 9 or hour > 18:
# return # ignore
)
アラート・通知
SNS 連携
# SNS トピックへの通知
response = client.create_alert(
AlertName='sales-alert',
Action={
'SNSConfiguration': {
'RoleArn': 'arn:aws:iam::account:role/SNSRole',
'SnsTopicArn': 'arn:aws:sns:region:account:sales-alerts'
}
}
)
# SNS サブスクリプション
sns_client = boto3.client('sns')
sns_client.subscribe(
TopicArn='arn:aws:sns:region:account:sales-alerts',
Protocol='email',
Endpoint='business-team@company.com'
)
Lambda トリガー
# Lambda を SNS でトリガー
def lambda_handler(event, context):
"""異常アラート受信時に自動対応"""
for record in event['Records']:
message = json.loads(record['Sns']['Message'])
anomaly_group_id = message['anomalyGroupId']
detector_arn = message['anomalyDetectorArn']
# 根本原因分析の詳細を取得
lookoutmetrics = boto3.client('lookoutmetrics')
response = lookoutmetrics.describe_anomaly_group(
AnomalyGroupId=anomaly_group_id
)
# Slack に通知
slack_message = f"""
異常検知: {response['AnomalyGroupSummary']['AnomalyGroupScore']:.0%}
根本原因: {response['AnomalyGroupSummary']['DimensionList']}
詳細: {response['AnomalyGroupDetails']['ResponseForecastingDetails']}
"""
send_slack_message(slack_message)
主要ユースケース
1. EC サイト売上監視
メトリクス:
- Daily Revenue(日次売上)
- Order Count(注文数)
- Conversion Rate(コンバージョン率)
- AOV(平均購買額)
ディメンション:
- 地域(都道府県)
- 商品カテゴリ
- デバイスタイプ(PC / Mobile)
- ユーザーセグメント(新規 / 既存 / VIP)
効果:
- 施策効果を即座に検知(当日中)
- 不具合を即座に発見(同日中に対応)
2. SaaS 事業の健全性監視
メトリクス:
- Daily ARR(年間経常収益)
- MRR(月間経常収益)
- Churn Rate(解約率)
- ARPU(ユーザーあたり売上)
ディメンション:
- 業界(金融 / 小売 / 製造)
- 企業規模(SMB / Enterprise)
- 契約プラン(Basic / Pro / Enterprise)
効果:
- 解約の兆候を早期検出
- 特定セグメントの危機を即座に把握
3. 広告運用パフォーマンス
メトリクス:
- CTR(クリックスルーレート)
- CPC(クリック単価)
- Conversion Count(コンバージョン数)
- ROAS(広告費対効果)
ディメンション:
- キャンペーン
- クリエイティブ
- ターゲット層
- 配信チャネル
効果:
- 広告不正クリック即座検知
- キャンペーン効果の即日分析
4. 在庫・サプライチェーン
メトリクス:
- Stock Level(在庫量)
- Stockout Rate(欠品率)
- Lead Time(納期)
- Supplier Performance(サプライヤー品質)
ディメンション:
- 商品
- 倉庫
- サプライヤー
効果:
- 欠品を 2-3 週間前に予知
- サプライヤー品質低下を即座に検知
CloudWatch Anomaly Detection との比較
| 観点 | Lookout for Metrics | CloudWatch Anomaly Detection |
|---|---|---|
| データソース | 多様(S3、Redshift、SaaS) | CloudWatch メトリクスのみ |
| メトリクスタイプ | ビジネス KPI | インフラメトリクス |
| 根本原因分析 | ✅ 自動 RCA | ❌ |
| 季節性対応 | ✅ 自動学習 | ✅ 自動学習 |
| ノーコード設定 | ✅ Web UI | ✅ コンソール |
| 複数ディメンション | ✅ 自動分析 | 手動設定 |
| 採用理由 | ビジネスメトリクス | インフラメトリクス |
他分析サービスとの比較
| 特徴 | Lookout for Metrics | Datadog Watchdog | New Relic | Splunk MLTK |
|---|---|---|---|---|
| 推奨用途 | ビジネス KPI | アプリケーション | インフラ + アプリ | ログ分析 |
| セットアップ時間 | 数日 | 1 週間 | 1-2 週間 | 数週間 |
| 根本原因分析 | ✅ 自動 | ✅ 自動 | ✅ 自動 | 手動 |
| S3 連携 | ✅ | ❌ | ❌ | ✅ |
| Salesforce 連携 | ✅ | ❌ | ❌ | ❌ |
セキュリティとコンプライアンス
データ暗号化
# S3 データの暗号化
s3 = boto3.client('s3')
s3.put_bucket_encryption(
Bucket='lookout-data',
ServerSideEncryptionConfiguration={
'Rules': [{
'ApplyServerSideEncryptionByDefault': {
'SSEAlgorithm': 'aws:kms',
'KMSMasterKeyID': 'arn:aws:kms:region:account:key/key-id'
}
}]
}
)
# Redshift との通信は TLS 1.2
アクセス制御(IAM)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lookoutmetrics:DescribeAnomalyDetector",
"lookoutmetrics:ListAnomalyGroupSummaries"
],
"Resource": "*"
},
{
"Effect": "Deny",
"Action": [
"lookoutmetrics:DeleteAnomalyDetector",
"lookoutmetrics:DeleteAlert"
],
"Resource": "*"
}
]
}
コスト分析
課金体系
| 項目 | 価格 |
|---|---|
| メトリクス | $0.33/メトリクス/月 |
| 異常スコアリング | $0.088/1,000 スコアリング |
コスト最適化
シナリオ: 10 メトリクス、日次分析(365 日)
メトリクス料金:
$0.33/メトリクス/月 × 10 × 12 = $39.60/年
異常スコアリング:
365 日 × 10 メトリクス = 3,650 スコア/年
= $0.32/年
総コスト: $39.92/年(ほぼ無視できるレベル)
ROI:
販売チームの データ分析員 1 名: $60,000/年
Lookout: $40/年
削減: $59,960/年(初年度)
マイグレーション戦略
2025年10月10日以降への対応
推奨移行先:
- CloudWatch Anomaly Detection – インフラメトリクス
- Amazon SageMaker Canvas – ノーコード予測
- AWS Glue + Bedrock – カスタム分析
移行シナリオ
シナリオ 1: CloudWatch Anomaly Detection
# CloudWatch でビジネスメトリクスを公開
cloudwatch = boto3.client('cloudwatch')
cloudwatch.put_metric_data(
Namespace='Business/Sales',
MetricData=[
{
'MetricName': 'DailyRevenue',
'Value': 1250000,
'Unit': 'None',
'Dimensions': [
{'Name': 'Region', 'Value': 'us-east-1'},
{'Name': 'Category', 'Value': 'smartphones'}
]
}
]
)
# CloudWatch Anomaly Detection を有効化
# → 自動異常検知
シナリオ 2: SageMaker Canvas
# ノーコード予測モデル構築
sagemaker = boto3.client('sagemaker')
response = sagemaker.create_auto_ml_job(
AutoMLJobName='sales-forecast',
InputDataConfig=[{
'DataSource': {
'S3DataSource': {
'S3DataType': 'S3Prefix',
'S3Uri': 's3://bucket/sales-data/'
}
}
}],
OutputDataConfig={'S3OutputPath': 's3://bucket/output/'},
ProblemType='Regression', # 売上予測
Role='arn:aws:iam::account:role/SageMakerRole'
)
ベストプラクティス
1. メトリクス設計
✅ 推奨:
- ビジネス上の重要性が高い指標
- 毎日 / 毎週 更新されるデータ
- 過去 3-12 ヶ月のデータ
- 複数ディメンション
❌ 非推奨:
- 技術的な指標(サーバーディスク等)
- 更新頻度が不規則
- 1 ヶ月未満のデータ
- ディメンションなし
2. アラート感度設定
# ビジネス重要度別に調整
# 重大な指標(売上): 高感度
response = client.create_alert(
AlertName='revenue-alert',
AlertSensitivityThreshold=60 # 敏感に反応
)
# 補助的な指標(PV): 低感度
response = client.create_alert(
AlertName='pageview-alert',
AlertSensitivityThreshold=85 # 大きな異常のみ
)
3. 学習期間の確保
新規メトリクス:
→ 最少 7 日
→ 1 ヶ月で良好な精度
→ 3 ヶ月で高精度
季節性が強い場合:
→ 1 年分のデータを推奨
→ 例: 小売業(クリスマス / GW 影響)
トラブルシューティング
アラートが多すぎる
原因: 感度設定が高すぎる
対策:
① AlertSensitivityThreshold を上げる
60 → 75(より大きな異常のみ通知)
② データソース品質確認
→ 外れ値を S3 から削除
→ Redshift の集計 SQL 再確認
根本原因分析の精度が低い
原因: ディメンション不足
対策:
① より詳細なディメンション追加
DimensionList=['region', 'category']
→ ['region', 'category', 'device_type', 'user_segment']
② 異常パターンが複雑
→ 複数の小さな Detector に分割
データ取得失敗
エラー: "DataSourceError"
→ Redshift 接続確認
→ IAM ロール権限確認
→ Security Group で Lookout IP ホワイトリスト
エラー: "SalesforceAuthenticationError"
→ OAuth トークン更新
→ Secrets Manager の認証情報確認
End of Support Notice
重要なお知らせ
Amazon Lookout for Metrics は 2025年10月10日をもってサポート終了予定です。
新規利用: 開始を避け、代替手段の評価を推奨 既存利用: サポート期間内に代替ソリューションへの移行を計画
推奨される移行経路
- CloudWatch Anomaly Detection – インフラメトリクス向け
- SageMaker Canvas – ノーコード予測モデル
- AWS Glue + Bedrock – カスタム分析パイプライン
まとめ
Amazon Lookout for Metrics は 「ビジネス KPI の異常を自動検知し根本原因を分析するサービス」 です。
強み
- 季節性・トレンドを自動学習
- 根本原因をディメンション別に自動分析
- 複数データソース統合対応
- ノーコード設定
制約
- 2025年10月10日でサポート終了
- カスタマイズ機能は限定的
- インフラメトリクス向けではない
選択基準
- ✅ ビジネス KPI(売上、CTR)の異常を検知したい
- ✅ 根本原因をデータドリブンに特定したい
- ✅ Salesforce / Marketo など SaaS と統合したい
- ❌ 2025年以降の長期運用を計画している
公式ドキュメント
最終更新: 2025年4月27日 バージョン: v2.0