0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】Amazon Quick ハンズオン ― 第0回 準備:架空シナリオのデータ準備

0
Last updated at Posted at 2026-10-03

1. この記事の目的

Amazon Quickを試してみようと思い、ハンズオン記事を書きました。

Amazon Quickは社内データの検索や分析、AIエージェントの構築、ワークフローの自動化など、企業のさまざまな業務を支援するAIサービスです。単なるチャットボットにとどまらず、複数の情報源を横断した調査や、大量のデータ分析、さらには定型業務の自動化まで対応できる点が特徴です。

今回は架空のクレジットカード会社を題材に、Amazon Quickの各機能を実際に利用し、その使い方を検証していきます。

以下のような業務シナリオを想定したハンズオンを複数回に分けて執筆します。

  • 競合調査: 複数の情報源から競合他社のサービスや価格戦略を調査・分析する。
  • 顧客レビュー分析: 数千件の顧客レビューを分析し、顧客の不満やサービス改善につながる傾向を把握する。
  • 契約変更業務の自動化: 顧客からの契約変更申請を受け付け、内容の確認や承認などの定型業務を自動化する。

これらのシナリオを通じて、Amazon Quickが提供する以下の5つの機能を検証します。

機能 概要
Research 複数の情報源を調査・分析し、レポートを作成する
Spaces 業務に関連する情報を集約し、AIから参照できる環境を構築する
Chat Agents 特定の業務に特化したAIエージェントを作成する
Flows 複数の処理を組み合わせ、定型業務を自動化する
Automate AIを活用して、複雑な業務プロセスを自動化する

まずは第0回として、データ置き場となるS3と、架空のクレジットカード会社のデータを用意していきます。

2. データ保管場所となるS3バケットの用意

データの保管場所にS3を使用します。S3バケットを準備します。

# AWSアカウントIDとリージョンを取得
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
REGION="ap-northeast-1"

# リソース名
BUCKET_NAME="任意のバケット名"
ROLE_NAME="任意のIAMロール名"

echo "Account ID: ${ACCOUNT_ID}"
echo "Region: ${REGION}"
echo "Bucket: ${BUCKET_NAME}"
echo "Role: ${ROLE_NAME}"

S3バケットを作成します。

# S3バケット作成
aws s3api create-bucket \
  --bucket "${BUCKET_NAME}" \
  --region "${REGION}" \
  --create-bucket-configuration LocationConstraint="${REGION}"

# パブリックアクセスをブロック
aws s3api put-public-access-block \
  --bucket "${BUCKET_NAME}" \
  --public-access-block-configuration \
  BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true

# SSE-S3で暗号化
aws s3api put-bucket-encryption \
  --bucket "${BUCKET_NAME}" \
  --server-side-encryption-configuration '{
    "Rules": [
      {
        "ApplyServerSideEncryptionByDefault": {
          "SSEAlgorithm": "AES256"
        }
      }
    ]
  }'

3. データアクセス用のIAMロールの用意

QuickからS3のデータにアクセスするためのIAMロールを用意します。

# 信頼ポリシー用jsonの用意
cat > trust-policy.json <<'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "quicksight.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "${ACCOUNT_ID}"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:quicksight:*:${ACCOUNT_ID}:*"
        }
      }
    }
  ]
}
EOF

# IAMロールを作成
aws iam create-role \
  --role-name "${ROLE_NAME}" \
  --assume-role-policy-document file://trust-policy.json

IAMロールにS3アクセス用のインライン許可ポリシーを付与します。

# インライン許可ポリシーjsonの作成
cat > s3-access-policy.json <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:ListBucketVersions",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::${BUCKET_NAME}"
    },
    {
      "Sid": "ReadObjects",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": "arn:aws:s3:::${BUCKET_NAME}/*"
    }
  ]
}
EOF

# IAMロールに付与
aws iam put-role-policy \
  --role-name "${ROLE_NAME}" \
  --policy-name "AmazonQuickS3AccessPolicy" \
  --policy-document file://s3-access-policy.json

4. バケットポリシーの設定

アカウント内のIAMプリンシパルにはアクセスを許可し、アカウント外からのアクセスを拒否するためのバケットポリシーを設定します。

# バケポリ用のJSONを作成
cat > bucket-policy.json <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyAccessOutsideAccount",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::${BUCKET_NAME}",
        "arn:aws:s3:::${BUCKET_NAME}/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalAccount": "${ACCOUNT_ID}"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "false"
        }
      }
    },
    {
      "Sid": "DenyInsecureTransport",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::${BUCKET_NAME}",
        "arn:aws:s3:::${BUCKET_NAME}/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      }
    }
  ]
}
EOF

# バケポリを設定
aws s3api put-bucket-policy \
  --bucket "${BUCKET_NAME}" \
  --policy file://bucket-policy.json

5. データの作成

ハンズオンで使用するデータを用意していきます。

5.1 顧客レビューデータ

日本語の顧客レビューを1,000件生成します。レビューには評価、投稿日時、カテゴリなどを含め、後続のAmazon Quickによる分析に利用できるようにします。

# 顧客レビューcsv作成スクリプト
cat > generate_reviews.sh <<'EOF'
#!/bin/bash

OUTPUT="customer_reviews.csv"

# CSVヘッダー
echo "review_id,customer_id,review_date,rating,category,review" > "$OUTPUT"

# レビューのサンプル
reviews=(
  "アプリの操作が簡単で、残高もすぐに確認できます"
  "ポイント還元率が高く、普段の買い物で重宝しています"
  "問い合わせの電話がなかなかつながらず、不便でした"
  "カードの利用通知がすぐに届くので安心です"
  "アプリの起動が遅く、改善してほしいです"
  "海外旅行でも問題なく利用できました"
  "ポイントの交換先が少ないと感じます"
  "不正利用をすぐに検知してもらえて助かりました"
  "年会費に見合うサービスだと思います"
  "カードの発行までに時間がかかりました"
  "キャンペーンが豊富でお得に感じます"
  "利用明細が見やすく、家計管理に役立っています"
  "問い合わせへの対応が丁寧でした"
  "決済時にエラーが発生し、買い物ができませんでした"
  "スマートフォンだけで手続きが完結するのが便利です"
)

categories=("アプリ" "ポイント" "カスタマーサポート" "セキュリティ" "決済" "カード発行")

for i in $(seq 1 1000); do
  review_id=$(printf "R%05d" "$i")
  customer_id=$(printf "C%05d" $((RANDOM % 500 + 1)))

  # 2026年1月~9月のランダムな日付
  timestamp=$(( $(date -d "2026-01-01" +%s) + RANDOM * 1000 ))
  review_date=$(date -d "@$((timestamp % ($(date -d "2026-10-01" +%s) - $(date -d "2026-01-01" +%s)) + $(date -d "2026-01-01" +%s)))" +%Y-%m-%d)

  rating=$((RANDOM % 5 + 1))
  category=${categories[$((RANDOM % ${#categories[@]}))]}
  review=${reviews[$((RANDOM % ${#reviews[@]}))]}

  # CSV出力
  printf '%s,%s,%s,%s,"%s","%s"\n' \
    "$review_id" "$customer_id" "$review_date" \
    "$rating" "$category" "$review" >> "$OUTPUT"
done

echo "Generated $OUTPUT"
EOF

# スクリプトに実行権限を付与して実行
chmod +x generate_reviews.sh
./generate_reviews.sh

以下のようなデータが生成できました。S3へアップロードします。

# 生成したデータの確認
head -n 5 customer_reviews.csv
review_id,customer_id,review_date,rating,category,review
R00001,C00012,2026-06-16,4,"アプリ","海外旅行でも問題なく利用できました"
R00002,C00145,2026-09-18,1,"決済","問い合わせの電話がなかなかつながらず、不便でした"
R00003,C00357,2026-05-25,4,"決済","問い合わせへの対応が丁寧でした"
R00004,C00317,2026-04-28,3,"アプリ","カードの発行までに時間がかかりました"

# S3へアップロード
aws s3 cp customer_reviews.csv \
  "s3://${BUCKET_NAME}/reviews/customer_reviews.csv"

5.2 競合サービスデータ・契約情報データ

競合調査と契約変更のシナリオで使用するデータを生成します。

PDF生成にPythonのreportlabを使用するので、インストールしておきます。

python3 -m pip install reportlab

データ生成スクリプトを用意して、実行します。

注意
顧客情報やサービスの情報はすべて架空の検証用データです

#データ生成スクリプト
cat > generate_data.sh <<'EOF'
#!/bin/bash
set -e

mkdir -p data/competitors data/customers

# ---------------------------------------
# 1. 競合他社の製品情報 HTML
# ---------------------------------------
cat > data/competitors/competitor_a.html <<'HTML'
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ABCカード 製品情報</title>
</head>
<body>
<h1>ABCカード ゴールド</h1>
<p>ABCカード株式会社が提供するゴールドカードです。</p>

<h2>基本情報</h2>
<ul>
<li>年会費:11,000円(税込)</li>
<li>ポイント還元率:1.0%</li>
<li>国際ブランド:Visa、Mastercard</li>
<li>申込対象:満20歳以上</li>
</ul>

<h2>主なサービス</h2>
<ul>
<li>国内主要空港ラウンジの利用</li>
<li>海外旅行傷害保険</li>
<li>年間利用額に応じたボーナスポイント</li>
<li>24時間対応の紛失・盗難窓口</li>
</ul>

<h2>キャンペーン</h2>
<p>新規入会後3か月以内に一定額を利用すると、
最大10,000ポイントを進呈します。</p>

<h2>お問い合わせ</h2>
<p>ABCカード株式会社 カスタマーセンター</p>
</body>
</html>
HTML

# ---------------------------------------
# 2. 競合他社の製品情報 PDF
# ---------------------------------------
cat > /tmp/generate_pdf.py <<'PY'
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont

pdfmetrics.registerFont(UnicodeCIDFont("HeiseiMin-W3"))

file_path = "data/competitors/competitor_b.pdf"
c = canvas.Canvas(file_path, pagesize=A4)
c.setFont("HeiseiMin-W3", 18)
c.drawString(50, 800, "XYZカード プラチナ 製品概要")

c.setFont("HeiseiMin-W3", 11)
lines = [
    "XYZカード株式会社が提供するプラチナカードです。",
    "",
    "【基本情報】",
    "年会費:22,000円(税込)",
    "ポイント還元率:1.5%",
    "国際ブランド:Visa",
    "申込対象:満25歳以上",
    "",
    "【主なサービス】",
    "・国内外の空港ラウンジ利用",
    "・海外旅行傷害保険(最高1億円)",
    "・コンシェルジュサービス",
    "・対象レストランでの優待",
    "",
    "【キャンペーン】",
    "新規入会後6か月以内の利用額に応じて",
    "最大20,000ポイントを進呈します。",
    "",
    "【お問い合わせ】",
    "XYZカード株式会社 カスタマーセンター",
    "",
    "※本資料はAmazon Quickの検証用に作成した架空の製品情報です。"
]

y = 760
for line in lines:
    c.drawString(50, y, line)
    y -= 28

c.save()
PY

python3 /tmp/generate_pdf.py

# ---------------------------------------
# 3. 競合他社の製品情報 CSV
# ---------------------------------------
cat > data/competitors/competitor_products.csv <<'CSV'
company,product,annual_fee,point_rate,brand,airport_lounge,travel_insurance,concierge
ABCカード,ABCカード ゴールド,11000,1.0, Visa,国内,海外旅行保険あり,なし
XYZカード,XYZカード プラチナ,22000,1.5,Visa,国内外,最高1億円,あり
DEFカード,DEFカード スタンダード,0,0.5,Mastercard,なし,なし,なし
GHIカード,GHIカード ゴールド,8800,1.2,Mastercard,国内,海外旅行保険あり,なし
CSV

# ---------------------------------------
# 4. 顧客情報 CSV
# ---------------------------------------
cat > data/customers/customers.csv <<'CSV'
customer_id,name,email,phone,address,birth_date,customer_status
C00001,山田太郎,taro@example.com,090-0000-0001,東京都千代田区,1990-04-12,ACTIVE
C00002,佐藤花子,hanako@example.com,090-0000-0002,東京都新宿区,1985-08-23,ACTIVE
C00003,鈴木一郎,ichiro@example.com,090-0000-0003,神奈川県横浜市,1978-11-05,ACTIVE
C00004,田中美咲,misaki@example.com,090-0000-0004,大阪府大阪市,1995-02-18,ACTIVE
C00005,高橋健,kent@example.com,090-0000-0005,愛知県名古屋市,1988-06-30,ACTIVE
CSV

# ---------------------------------------
# 5. カード契約情報 CSV
# ---------------------------------------
cat > data/customers/card_contracts.csv <<'CSV'
contract_id,customer_id,card_product,credit_limit,annual_fee,payment_method,contract_status
K00001,C00001,ゴールドカード,1000000,11000,口座振替,ACTIVE
K00002,C00002,スタンダードカード,500000,0,口座振替,ACTIVE
K00003,C00003,プラチナカード,2000000,22000,口座振替,ACTIVE
K00004,C00004,ゴールドカード,800000,11000,クレジットカード,ACTIVE
K00005,C00005,スタンダードカード,300000,0,口座振替,ACTIVE
CSV

# ---------------------------------------
# 6. カード契約情報 JSON
# ---------------------------------------
cat > data/customers/card_contracts.json <<'JSON'
{
  "contracts": [
    {
      "contract_id": "K00001",
      "customer_id": "C00001",
      "card_product": "ゴールドカード",
      "credit_limit": 1000000,
      "annual_fee": 11000,
      "payment_method": "口座振替",
      "contract_status": "ACTIVE"
    },
    {
      "contract_id": "K00002",
      "customer_id": "C00002",
      "card_product": "スタンダードカード",
      "credit_limit": 500000,
      "annual_fee": 0,
      "payment_method": "口座振替",
      "contract_status": "ACTIVE"
    },
    {
      "contract_id": "K00003",
      "customer_id": "C00003",
      "card_product": "プラチナカード",
      "credit_limit": 2000000,
      "annual_fee": 22000,
      "payment_method": "口座振替",
      "contract_status": "ACTIVE"
    },
    {
      "contract_id": "K00004",
      "customer_id": "C00004",
      "card_product": "ゴールドカード",
      "credit_limit": 800000,
      "annual_fee": 11000,
      "payment_method": "クレジットカード",
      "contract_status": "ACTIVE"
    },
    {
      "contract_id": "K00005",
      "customer_id": "C00005",
      "card_product": "スタンダードカード",
      "credit_limit": 300000,
      "annual_fee": 0,
      "payment_method": "口座振替",
      "contract_status": "ACTIVE"
    }
  ]
}
JSON

echo "データ生成完了"
find data -type f -print
EOF

# スクリプトに実行権限を付与して実行
chmod +x generate_data.sh
./generate_data.sh

以下のようなデータが生成できました。S3へアップロードします。

# 生成したデータの確認
python3 -m json.tool data/customers/card_contracts.json
{
    "contracts": [
        {
            "contract_id": "K00001",
            "customer_id": "C00001",
            "card_product": "\u30b4\u30fc\u30eb\u30c9\u30ab\u30fc\u30c9",
            "credit_limit": 1000000,
            "annual_fee": 11000,
            "payment_method": "\u53e3\u5ea7\u632f\u66ff",
            "contract_status": "ACTIVE"
        } (省略)
    ]
}

csvデータは以下の通りです。

# 生成したデータの確認
head data/competitors/competitor_products.csv
company,product,annual_fee,point_rate,brand,airport_lounge,travel_insurance,concierge
ABCカード,ABCカード ゴールド,11000,1.0, Visa,国内,海外旅行保険あり,なし
XYZカード,XYZカード プラチナ,22000,1.5,Visa,国内外,最高1億円,あり
DEFカード,DEFカード スタンダード,0,0.5,Mastercard,なし,なし,なし
GHIカード,GHIカード ゴールド,8800,1.2,Mastercard,国内,海外旅行保険あり,なし

head data/customers/customers.csv
customer_id,name,email,phone,address,birth_date,customer_status
C00001,山田太郎,taro@example.com,090-0000-0001,東京都千代田区,1990-04-12,ACTIVE
C00002,佐藤花子,hanako@example.com,090-0000-0002,東京都新宿区,1985-08-23,ACTIVE
C00003,鈴木一郎,ichiro@example.com,090-0000-0003,神奈川県横浜市,1978-11-05,ACTIVE
C00004,田中美咲,misaki@example.com,090-0000-0004,大阪府大阪市,1995-02-18,ACTIVE
C00005,高橋健,kent@example.com,090-0000-0005,愛知県名古屋市,1988-06-30,ACTIVE

head data/customers/card_contracts.csv
contract_id,customer_id,card_product,credit_limit,annual_fee,payment_method,contract_status
K00001,C00001,ゴールドカード,1000000,11000,口座振替,ACTIVE
K00002,C00002,スタンダードカード,500000,0,口座振替,ACTIVE
K00003,C00003,プラチナカード,2000000,22000,口座振替,ACTIVE
K00004,C00004,ゴールドカード,800000,11000,クレジットカード,ACTIVE
K00005,C00005,スタンダードカード,300000,0,口座振替,ACTIV

# S3へアップロード
# 競合調査用データ
aws s3 cp data/competitors/ \
  "s3://${BUCKET_NAME}/competitors/" \
  --recursive

# 契約変更用データ
aws s3 cp data/customers/ \
  "s3://${BUCKET_NAME}/customers/" \
  --recursive

5.3 各種業務手続に必要なデータ

契約変更の判断に使う料金・規約情報、業務自動化の入力となる契約変更申請、AIの回答精度向上に使う過去の問い合わせ記録を生成します。

データ生成スクリプトを用意して実行します。

#データ生成スクリプト
cat > generate_additional_data.sh <<'EOF'
#!/bin/bash
set -e

mkdir -p data/policies data/requests data/support

# ==========================================
# 1. 料金表 PDF
# ==========================================

cat > /tmp/generate_fee_pdf.py <<'PY'
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont

pdfmetrics.registerFont(UnicodeCIDFont("HeiseiMin-W3"))

path = "data/policies/card_fee_schedule.pdf"
c = canvas.Canvas(path, pagesize=A4)

c.setFont("HeiseiMin-W3", 18)
c.drawString(50, 800, "架空カード会社 料金表")

c.setFont("HeiseiMin-W3", 11)
lines = [
    "株式会社サンプルカード",
    "適用開始日:2026年4月1日",
    "",
    "【カード商品別 年会費】",
    "スタンダードカード:無料",
    "ゴールドカード:11,000円(税込)",
    "プラチナカード:22,000円(税込)",
    "",
    "【ポイント還元率】",
    "スタンダードカード:0.5%",
    "ゴールドカード:1.0%",
    "プラチナカード:1.5%",
    "",
    "【契約変更手数料】",
    "カード商品変更:無料",
    "支払方法変更:無料",
    "利用限度額変更:無料",
    "",
    "【注意事項】",
    "カード商品変更後の年会費は変更後の商品に準じます。",
    "年会費は商品変更日ではなく、契約更新日に請求される場合があります。",
    "具体的な請求時期は契約状況に応じて確認してください。",
    "",
    "本資料はAmazon Quickの検証用に作成した架空の料金表です。"
]

y = 760
for line in lines:
    c.drawString(50, y, line)
    y -= 27

c.save()
PY

python3 /tmp/generate_fee_pdf.py

# ==========================================
# 2. カード会員規約 Markdown
# ==========================================

cat > data/policies/card_terms.md <<'MD'
# サンプルカード会員規約

- 会社名:株式会社サンプルカード
- 規約バージョン:1.0
- 適用開始日:2026年4月1日
- 用途:Amazon Quick検証用の架空規約

## 第1条(カードの種類)

当社は、以下のカードを発行します。

- スタンダードカード
- ゴールドカード
- プラチナカード

各カードの年会費およびポイント還元率は、別途定める料金表に従います。

## 第2条(カード商品変更)

会員は、当社所定の手続きによりカード商品を変更できます。

商品変更の申請には、本人確認および契約状況の確認が必要です。

変更後の商品に応じて、年会費およびポイント還元率が変更されます。

上位カードへの変更については、当社所定の審査を行う場合があります。

## 第3条(利用限度額の変更)

会員は、利用限度額の変更を申請できます。

利用限度額の増額には審査が必要です。

申請された金額が希望どおり承認されるとは限りません。

減額については、本人確認および契約状況の確認後に手続きを行います。

## 第4条(支払方法の変更)

会員は、当社所定の手続きにより支払方法の変更を申請できます。

変更には、変更先の支払方法に関する必要情報の登録が必要です。

登録内容に不備がある場合、変更手続きを保留することがあります。

## 第5条(契約変更の受付と承認)

契約変更の申請を受け付けた場合、当社は申請内容および契約状況を確認します。

審査や追加確認が必要な申請については、担当者による確認を行います。

申請内容に不備がある場合は、会員に追加情報を求めることがあります。

## 第6条(年会費の取り扱い)

年会費は、変更後の商品および契約更新時期に応じて請求します。

商品変更前に支払われた年会費の返金や差額精算については、
個別の契約条件および当社の規定に従います。

## 第7条(申請内容の確認)

当社は、申請内容に不整合がある場合や本人確認が完了していない場合、
契約変更を保留することがあります。

自動処理で判断できない申請は、担当者による確認の対象とします。

---

本規約は検証用の架空文書であり、実際の金融商品や契約には適用されません。
MD

# ==========================================
# 3. 契約変更申請 JSON
# ==========================================

cat > data/requests/change_requests.json <<'JSON'
{
  "requests": [
    {
      "request_id": "REQ00001",
      "customer_id": "C00001",
      "contract_id": "K00001",
      "request_type": "PRODUCT_CHANGE",
      "current_product": "ゴールドカード",
      "requested_product": "プラチナカード",
      "reason": "旅行関連サービスを利用したいため",
      "requested_at": "2026-09-20T10:30:00+09:00",
      "status": "PENDING",
      "identity_verified": true
    },
    {
      "request_id": "REQ00002",
      "customer_id": "C00002",
      "contract_id": "K00002",
      "request_type": "PRODUCT_CHANGE",
      "current_product": "スタンダードカード",
      "requested_product": "ゴールドカード",
      "reason": "ポイント還元率を上げたいため",
      "requested_at": "2026-09-21T11:15:00+09:00",
      "status": "PENDING",
      "identity_verified": true
    },
    {
      "request_id": "REQ00003",
      "customer_id": "C00003",
      "contract_id": "K00003",
      "request_type": "LIMIT_INCREASE",
      "current_limit": 2000000,
      "requested_limit": 3000000,
      "reason": "高額商品の購入予定があるため",
      "requested_at": "2026-09-22T14:00:00+09:00",
      "status": "PENDING",
      "identity_verified": true
    },
    {
      "request_id": "REQ00004",
      "customer_id": "C00004",
      "contract_id": "K00004",
      "request_type": "PAYMENT_METHOD_CHANGE",
      "current_payment_method": "クレジットカード",
      "requested_payment_method": "口座振替",
      "reason": "毎月の支払いを自動化したいため",
      "requested_at": "2026-09-23T09:45:00+09:00",
      "status": "PENDING",
      "identity_verified": false
    },
    {
      "request_id": "REQ00005",
      "customer_id": "C00005",
      "contract_id": "K00005",
      "request_type": "LIMIT_DECREASE",
      "current_limit": 300000,
      "requested_limit": 100000,
      "reason": "利用限度額を見直したいため",
      "requested_at": "2026-09-24T16:20:00+09:00",
      "status": "PENDING",
      "identity_verified": true
    }
  ]
}
JSON

# ==========================================
# 4. 過去の問い合わせ記録 CSV
# ==========================================

cat > data/support/support_history.csv <<'CSV'
ticket_id,customer_id,category,question,answer,resolution_status,created_at
T00001,C00001,年会費,ゴールドカードの年会費はいくらですか,ゴールドカードの年会費は税込11000円です,RESOLVED,2026-08-01
T00002,C00002,ポイント,ポイント還元率を教えてください,スタンダードカードのポイント還元率は0.5%です,RESOLVED,2026-08-02
T00003,C00003,カード変更,プラチナカードに変更できますか,商品変更には契約状況の確認や審査が必要となる場合があります,RESOLVED,2026-08-03
T00004,C00004,利用限度額,利用限度額を増額したいです,増額には所定の審査が必要です。申請額が承認されるとは限りません,RESOLVED,2026-08-04
T00005,C00005,支払方法,口座振替に変更したいです,所定の手続きと口座情報の登録が必要です,RESOLVED,2026-08-05
T00006,C00001,年会費,カードを変更したら年会費はどうなりますか,変更後の商品と契約更新時期に応じて請求されます。詳細は契約状況の確認が必要です,RESOLVED,2026-08-06
T00007,C00002,カード変更,スタンダードからゴールドに変更したいです,商品変更の申請を受け付けています。契約状況を確認し、必要に応じて審査を行います,RESOLVED,2026-08-07
T00008,C00003,本人確認,本人確認が必要なのはなぜですか,お客様ご本人による申請であることを確認するためです,RESOLVED,2026-08-08
T00009,C00004,利用限度額,限度額の減額には審査が必要ですか,減額についても本人確認と契約状況の確認が必要です,RESOLVED,2026-08-09
T00010,C00005,問い合わせ,申請後どのくらいで変更されますか,申請内容や確認事項によって異なります。審査が必要な場合は完了まで時間がかかることがあります,RESOLVED,2026-08-10
T00011,C00001,ポイント,プラチナカードの還元率はいくらですか,プラチナカードのポイント還元率は1.5%です,RESOLVED,2026-08-11
T00012,C00002,支払方法,支払方法の変更に手数料はかかりますか,検証用の料金表では支払方法変更の手数料は無料です,RESOLVED,2026-08-12
T00013,C00003,カード変更,商品変更の手数料はいくらですか,検証用の料金表ではカード商品変更の手数料は無料です,RESOLVED,2026-08-13
T00014,C00004,本人確認,本人確認が完了していない場合はどうなりますか,本人確認が完了するまで申請を保留し、追加確認をお願いする場合があります,RESOLVED,2026-08-14
T00015,C00005,年会費,年会費の返金はできますか,返金や差額精算は契約条件および規定に従って個別に確認します,ESCALATED,2026-08-15
CSV

echo "データ生成完了"
find data/policies data/requests data/support -type f -print
EOF

# スクリプトに実行権限を付与して実行
chmod +x generate_additional_data.sh
./generate_additional_data.sh

以下のようなデータが生成できました。S3へアップロードします。

# 生成したデータの確認
python3 -m json.tool data/requests/change_requests.json
{
    "requests": [
        {
            "request_id": "REQ00001",
            "customer_id": "C00001",
            "contract_id": "K00001",
            "request_type": "PRODUCT_CHANGE",
            "current_product": "\u30b4\u30fc\u30eb\u30c9\u30ab\u30fc\u30c9",
            "requested_product": "\u30d7\u30e9\u30c1\u30ca\u30ab\u30fc\u30c9",
            "reason": "\u65c5\u884c\u95a2\u9023\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3057\u305f\u3044\u305f\u3081",
            "requested_at": "2026-09-20T10:30:00+09:00",
            "status": "PENDING",
            "identity_verified": true
        } (省略)
    ]
}

csvデータは以下の通りです。

# 生成したデータの確認
head data/support/support_history.csv
ticket_id,customer_id,category,question,answer,resolution_status,created_at
T00001,C00001,年会費,ゴールドカードの年会費はいくらですか,ゴールドカードの年会費は税込11000円です,RESOLVED,2026-08-01
T00002,C00002,ポイント,ポイント還元率を教えてください,スタンダードカードのポイント還元率は0.5%です,RESOLVED,2026-08-02
T00003,C00003,カード変更,プラチナカードに変更できますか,商品変更には契約状況の確認や審査が必要となる場合があります,RESOLVED,2026-08-03
T00004,C00004,利用限度額,利用限度額を増額したいです,増額には所定の審査が必要です。申請額が承認されるとは限りません,RESOLVED,2026-08-04
T00005,C00005,支払方法,口座振替に変更したいです,所定の手続きと口座情報の登録が必要です,RESOLVED,2026-08-05
T00006,C00001,年会費,カードを変更したら年会費はどうなりますか,変更後の商品と契約更新時期に応じて請求されます。詳細は契約状況の確認が必要です,RESOLVED,2026-08-06
T00007,C00002,カード変更,スタンダードからゴールドに変更したいです,商品変更の申請を受け付けています。契約状況を確認し、必要に応じて審査を行います,RESOLVED,2026-08-07
T00008,C00003,本人確認,本人確認が必要なのはなぜですか,お客様ご本人による申請であることを確認するためです,RESOLVED,2026-08-08
T00009,C00004,利用限度額,限度額の減額には審査が必要ですか,減額についても本人確認と契約状況の確認が必要です,RESOLVED,202

# S3へアップロード
# 規約関連のデータ
aws s3 cp data/policies/ \
  "s3://${BUCKET_NAME}/policies/" \
  --recursive

# 契約変更申請関連のデータ
aws s3 cp data/requests/ \
  "s3://${BUCKET_NAME}/requests/" \
  --recursive

# サポート問い合わせ関連のデータ
aws s3 cp data/support/ \
  "s3://${BUCKET_NAME}/support/" \
  --recursive

まとめ

今回はここまでです。次回からAmazon Quickをセットアップしてこれらのデータを解析していきます。

続きはこちらの記事をご覧ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?