Deploying an AI-Powered FIFA World Cup Analytics Platform on AWS: From Data Lake to Production Inference
本教程将指导您部署一个完整的、基于人工智能的 FIFA 世界杯分析平台。您将使用 AWS 服务,例如 Amazon S3、Athena、QuickSight、Bedrock(用于生成式人工智能)和 SageMaker(用于自定义机器学习模型) ,构建一个安全、可扩展的解决方案,用于实时数据采集、统计分析、预测建模和对话式洞察。本教程非常适合体育分析爱好者、数据工程师和机器学习从业者
主题:
在 AWS 上部署 AI 驱动的 FIFA 世界杯分析平台:从数据湖到生产推理本教程将指导您部署一个完整的、基于人工智能的 FIFA 世界杯分析平台。您将使用 AWS 服务,例如 Amazon S3、Athena、QuickSight、Bedrock(用于生成式人工智能)和 SageMaker(用于自定义机器学习模型)
,构建一个安全、可扩展的解决方案,用于实时数据采集、统计分析、预测建模和对话式洞察。本教程非常适合体育分析爱好者、数据工程师和机器学习从业者。完成本教程后,您将拥有一个可用于生产环境的系统,该系统能够回答有关历史数据的自然语言问题并预测比赛结果。
在 AWS 上部署 AI 驱动的 FIFA 世界杯分析平台:从数据湖到生产推理本教程将指导您部署一个完整的、基于人工智能的 FIFA 世界杯分析平台。您将使用 AWS 服务,例如 Amazon S3、Athena、QuickSight、Bedrock(用于生成式人工智能)和 SageMaker(用于自定义机器学习模型)
,构建一个安全、可扩展的解决方案,用于实时数据采集、统计分析、预测建模和对话式洞察。本教程非常适合体育分析爱好者、数据工程师和机器学习从业者。完成本教程后,您将拥有一个可用于生产环境的系统,该系统能够回答有关历史数据的自然语言问题并预测比赛结果。
builder.aws.com
正文(Main Body)1. 架构概述 (Architecture Overview)该平台遵循现代数据+人工智能湖屋模式:数据层:Amazon S3 作为中央数据湖(CSV 文件,如WorldCups.csv和team_statistics.csv)。
查询层:Amazon Athena 用于无服务器 SQL 分析。
可视化:Amazon QuickSight 用于交互式仪表板。
AI 层:Amazon Bedrock 知识库 (RAG) 用于对话式问答 + SageMaker 用于自定义预测模型。
安全性:最小权限 IAM 角色。
部署方式:尽可能采用无服务器架构,以提高成本效益和可扩展性。
查询层:Amazon Athena 用于无服务器 SQL 分析。
可视化:Amazon QuickSight 用于交互式仪表板。
AI 层:Amazon Bedrock 知识库 (RAG) 用于对话式问答 + SageMaker 用于自定义预测模型。
安全性:最小权限 IAM 角色。
部署方式:尽可能采用无服务器架构,以提高成本效益和可扩展性。
主要优势:实时数据摄取
预测分析(例如,比赛胜负预测、球员表现预测)
由 GenAI 提供支持的自然语言界面
预测分析(例如,比赛胜负预测、球员表现预测)
由 GenAI 提供支持的自然语言界面
- 第一步:搭建数据基础和安全保障将数据集上传到 S3:狂欢
aws s3 mb s3://fifa-worldcup-analytics-bucket
aws s3 cp WorldCups.csv s3://fifa-worldcup-analytics-bucket/raw/
aws s3 cp team_statistics.csv s3://fifa-worldcup-analytics-bucket/raw/
aws s3 cp WorldCups.csv s3://fifa-worldcup-analytics-bucket/raw/
aws s3 cp team_statistics.csv s3://fifa-worldcup-analytics-bucket/raw/
创建有作用域的 IAM 角色(对安全至关重要):JSON
// IAM Policy (fifa-data-access-policy.json)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::fifa-worldcup-analytics-bucket",
"arn:aws:s3:::fifa-worldcup-analytics-bucket/raw/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::fifa-worldcup-analytics-bucket",
"arn:aws:s3:::fifa-worldcup-analytics-bucket/raw/*"
]
}
]
}
将此策略附加到 Athena 和 Bedrock 使用的角色。3. 步骤 2:使用 Amazon Athena 查询数据在 Athena 中创建外部表:sql
CREATE EXTERNAL TABLE world_cups (
year INT,
country STRING,
winner STRING,
runners_up STRING,
goals_scored INT,
attendance INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION 's3://fifa-worldcup-analytics-bucket/raw/'
TBLPROPERTIES ("skip.header.line.count"="1");
year INT,
country STRING,
winner STRING,
runners_up STRING,
goals_scored INT,
attendance INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION 's3://fifa-worldcup-analytics-bucket/raw/'
TBLPROPERTIES ("skip.header.line.count"="1");
运行示例分析查询:sql
-- Top goal-scoring tournaments
SELECT year, country, goals_scored
FROM world_cups
ORDER BY goals_scored DESC
LIMIT 5;
SELECT year, country, goals_scored
FROM world_cups
ORDER BY goals_scored DESC
LIMIT 5;
- 步骤 3:使用 SageMaker 构建预测模型对于自定义机器学习预测(例如,获胜概率),请使用 SageMaker。示例:训练一个简单的随机森林模型(Python SDK)Python
import sagemaker
from sagemaker.sklearn.estimator import SKLearn
import pandas as pd
from sklearn.model_selection import train_test_split
from sagemaker.sklearn.estimator import SKLearn
import pandas as pd
from sklearn.model_selection import train_test_split
Load and prepare data
df = pd.read_csv('team_statistics.csv')
X = df[['fifa_rank', 'titles', 'win_percentage', 'avg_goals']]
y = df['champion_potential'] # target label
X = df[['fifa_rank', 'titles', 'win_percentage', 'avg_goals']]
y = df['champion_potential'] # target label
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Upload to S3
train_data = pd.concat([X_train, y_train], axis=1)
train_data.to_csv('train.csv', index=False)
sagemaker_session = sagemaker.Session()
train_s3_uri = sagemaker_session.upload_data('train.csv', bucket='fifa-worldcup-analytics-bucket', key_prefix='train')
train_data.to_csv('train.csv', index=False)
sagemaker_session = sagemaker.Session()
train_s3_uri = sagemaker_session.upload_data('train.csv', bucket='fifa-worldcup-analytics-bucket', key_prefix='train')
Train with SageMaker
sklearn_estimator = SKLearn(
entry_point='train.py',
role='SageMakerExecutionRole',
instance_type='ml.m5.large',
framework_version='1.2-1',
py_version='py3'
)
entry_point='train.py',
role='SageMakerExecutionRole',
instance_type='ml.m5.large',
framework_version='1.2-1',
py_version='py3'
)
sklearn_estimator.fit({'train': train_s3_uri})
train.py(入口脚本):Python
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import joblib
import argparse
import os
import pandas as pd
import joblib
import argparse
import os
if name == "main":
parser = argparse.ArgumentParser()
parser.add_argument('--model-dir', type=str, default=os.environ.get('SM_MODEL_DIR'))
args = parser.parse_args()
parser = argparse.ArgumentParser()
parser.add_argument('--model-dir', type=str, default=os.environ.get('SM_MODEL_DIR'))
args = parser.parse_args()
1
2
3
4
5
6
7
8
train = pd.read_csv('/opt/ml/input/data/train/train.csv')
X = train.drop('champion_potential', axis=1)
y = train['champion_potential']
model = RandomForestClassifier(n_estimators=100)
model.fit(X, y)
joblib.dump(model, os.path.join(args.model_dir, 'model.joblib'))5. 第四步:部署模型进行推理部署为实时端点:Python
from sagemaker.sklearn.model import SKLearnModel
model = SKLearnModel(
model_data=sklearn_estimator.model_data,
role='SageMakerExecutionRole',
entry_point='inference.py',
framework_version='1.2-1'
)
model_data=sklearn_estimator.model_data,
role='SageMakerExecutionRole',
entry_point='inference.py',
framework_version='1.2-1'
)
predictor = model.deploy(
initial_instance_count=1,
instance_type='ml.t2.medium',
endpoint_name='fifa-win-predictor'
)
initial_instance_count=1,
instance_type='ml.t2.medium',
endpoint_name='fifa-win-predictor'
)
inference.py:Python
import joblib
import numpy as np
import numpy as np
def model_fn(model_dir):
return joblib.load(f"{model_dir}/model.joblib")
return joblib.load(f"{model_dir}/model.joblib")
def predict_fn(input_data, model):
return model.predict(np.array(input_data).reshape(1, -1)).tolist()
return model.predict(np.array(input_data).reshape(1, -1)).tolist()
测试一下:Python
payload = [[5, 2, 65.3, 2.1]] # example features
response = predictor.predict(payload)
print("Win Probability:", response)
response = predictor.predict(payload)
print("Win Probability:", response)
- 第 5 步:使用 Amazon Bedrock 添加对话式 AI使用您的 S3 数据和 Athena 查询结果,在 Bedrock 中创建知识库。然后通过 SDK 进行查询:Python
import boto3
bedrock = boto3.client('bedrock-runtime')
def ask_fifa_analyst(question):
response = bedrock.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
contentType='application/json',
accept='application/json',
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1000,
"messages": [{"role": "user", "content": question}]
})
)
return response['body'].read().decode()
response = bedrock.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
contentType='application/json',
accept='application/json',
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1000,
"messages": [{"role": "user", "content": question}]
})
)
return response['body'].read().decode()
Example
print(ask_fifa_analyst("Which team has the best historical profile for 2026 World Cup?"))
- 第六步:可视化与生产监控将 Athena 连接到 QuickSight 以创建仪表盘。
使用 SageMaker 模型监视器进行漂移检测。
在端点上设置自动扩展和 CloudWatch 警报。
生产环境部署最佳实践:使用蓝绿部署实现零停机更新。
启用加密和私有 VPC 端点。
使用 AWS Budgets 监控成本(Bedrock 按代币付费)。
使用 SageMaker Pipelines 实现 CI/CD 以进行再训练。
启用加密和私有 VPC 端点。
使用 AWS Budgets 监控成本(Bedrock 按代币付费)。
使用 SageMaker Pipelines 实现 CI/CD 以进行再训练。
这种端到端的部署方案可以将原始足球数据转化为可执行的AI洞察。您还可以通过实时流媒体(Kinesis)或计算机视觉技术来扩展其功能,从而获得比赛精彩集锦。需要完整代码仓库、架构图或特定部分扩展吗?随时告诉我!
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article