2024美赛E题(财产保险的可持续性)深度剖析|详细建模+代码实现(LSTM+决策树算法)

6 篇文章 0 订阅
6 篇文章 0 订阅

首先回顾一下本次美赛的E题:

问题1的解决思路如下:

python示例代码:

import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense

# 生成示例数据
np.random.seed(42)
data_size = 1000
time_steps = 10

X = np.random.rand(data_size, time_steps, 3)  # 3特征的时间序列数据
y_claim = np.random.rand(data_size, 1)  # 示例索赔成本
y_weather = np.random.rand(data_size, 1)  # 示例极端天气发生概率

# 构建LSTM模型
model = Sequential()
model.add(LSTM(50, input_shape=(time_steps, 3)))
model.add(Dense(2))  # 输出层有两个节点,分别对应索赔成本和极端天气发生概率

# 编译模型
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_absolute_error'])

# 训练模型
model.fit(X, [y_claim, y_weather], epochs=10, batch_size=32, validation_split=0.2)

matlab示例代码:

% 生成示例数据
rng(42);
data_size = 1000;
time_steps = 10;

X = rand(data_size, 3, time_steps);  % 3个特征的时间序列数据
y_claim = rand(data_size, 1);        % 示例索赔成本
y_weather = rand(data_size, 1);      % 示例极端天气发生概率

% 构建LSTM模型
model = lstmLayer(50, 'InputSize', [3, time_steps]);
model = addLayers(model, fullyConnectedLayer(2));  % 输出层有两个节点,分别对应索赔成本和极端天气发生概率

% 编译模型
options = trainingOptions('adam', 'MaxEpochs', 10, 'MiniBatchSize', 32, 'ValidationSplit', 0.2);
model = trainNetwork(X, {y_claim, y_weather}, model, options);

% 模型训练完成后,可以使用模型进行预测
% predictions = predict(model, newX);  % newX 为新的输入数据

问题2的解决思路如下:

python示例代码:

from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier, export_text
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, mean_squared_error
import pandas as pd
import numpy as np

# 示例数据准备
np.random.seed(42)
data_size = 1000

# 特征:地理位置、房屋类型、保险费率
X = np.random.rand(data_size, 3)

# 标签1:是否发生索赔(0表示未发生,1表示发生)
y_claim = np.random.randint(2, size=data_size)

# 标签2:索赔成本(回归问题)
y_claim_cost = np.random.rand(data_size)

# 合并特征和标签
df = pd.DataFrame(np.column_stack([X, y_claim, y_claim_cost]), columns=['Location', 'House_Type', 'Insurance_Rate', 'Claim', 'Claim_Cost'])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[['Location', 'House_Type', 'Insurance_Rate']], df['Claim'], test_size=0.2, random_state=42)

# 构建决策树分类模型
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# 预测是否发生索赔
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

# 特征重要性
feature_importance = clf.feature_importances_
print(f"Feature Importance: {feature_importance}")

# 构建决策树回归模型(预测索赔成本)
reg = DecisionTreeRegressor()
reg.fit(X_train, df.loc[X_train.index]['Claim_Cost'])

# 预测索赔成本
y_pred_cost = reg.predict(X_test)

# 计算均方误差
mse = mean_squared_error(df.loc[X_test.index]['Claim_Cost'], y_pred_cost)
print(f"Mean Squared Error for Claim Cost: {mse:.2f}")

# 打印决策树规则
tree_rules = export_text(clf, feature_names=['Location', 'House_Type', 'Insurance_Rate'])
print("Decision Tree Rules:")
print(tree_rules)

matlab示例代码:

% 示例数据准备
rng(42);
data_size = 1000;

% 特征:地理位置、房屋类型、保险费率
X = rand(data_size, 3);

% 标签1:是否发生索赔(0表示未发生,1表示发生)
y_claim = randi([0, 1], data_size, 1);

% 标签2:索赔成本(回归问题)
y_claim_cost = rand(data_size, 1);

% 合并特征和标签
data = table(X(:,1), X(:,2), X(:,3), y_claim, y_claim_cost, 'VariableNames', {'Location', 'House_Type', 'Insurance_Rate', 'Claim', 'Claim_Cost'});

% 划分训练集和测试集
[trainData, testData] = splitvars(data, 'TrainTest', 0.8);

% 构建决策树分类模型
clf = fitctree(trainData(:,1:3), trainData.Claim);

% 预测是否发生索赔
y_pred = predict(clf, testData(:,1:3));

% 计算准确率
accuracy = sum(y_pred == testData.Claim) / length(y_pred);
disp(['Accuracy: ' num2str(accuracy)]);

% 特征重要性
feature_importance = clf.CutVarImportance;
disp(['Feature Importance: ' num2str(feature_importance')]);

% 构建决策树回归模型(预测索赔成本)
reg = fitrtree(trainData(:,1:3), trainData.Claim_Cost);

% 预测索赔成本
y_pred_cost = predict(reg, testData(:,1:3));

% 计算均方误差
mse = mean((y_pred_cost - testData.Claim_Cost).^2);
disp(['Mean Squared Error for Claim Cost: ' num2str(mse)]);

% 打印决策树规则
view(clf, 'Mode', 'graph');

查看完整思路如下:

【腾讯文档】2024美赛全题目深度解析(建模过程+代码实现+论文指导)
https://docs.qq.com/doc/DSG1LQWtOQ3lFWHNj

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值