当前位置: 首页 > news >正文

十种常用数据分析模型

1-线性回归(Linear Regression)

场景:预测商品销售额

  • 优点:简单易用,结果易于解释
  • 缺点:假设线性关系,容易受到异常值影响
  • 概念:建立自变量和因变量之间线性关系的模型。
  • 公式:[ y = b_0 + b_1x_1 + b_2x_2 + ... + b_nx_n ]

代码示例:

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 假设我们有一个包含商品销售数据的DataFrame
data = pd.DataFrame({'item_sku_id': [100000350860, 100000350861, 100000350862, 100000350863],'before_prefr_unit_price': [1499.0, 1599.0, 1399.0, 1299.0],'after_prefr_unit_price': [1099.0, 1199.0, 999.0, 899.0],'sale_qtty': [50, 60, 55, 65]
})# 特征和目标变量
X = data[['before_prefr_unit_price', 'after_prefr_unit_price']]
y = data['sale_qtty']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

结果与判断:

通过模型预测销售量,评估误差可以帮助改进定价策略。

2-逻辑回归(Logistic Regression)

场景:预测订单是否有效

  • 优点:适用于二分类问题,解释性强
  • 缺点:不适用于多分类或连续型结果预测
  • 概念:用于处理二分类问题,输出值在0到1之间。
  • 公式:[ P(Y=1|X) = \frac{1}{1 + e^{-(b_0 + b_1x_1 + b_2x_2 + ... + b_nx_n)}} ]

代码示例:

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix# 数据
data = pd.DataFrame({'user_actual_pay_amount': [976.0, 978.99, 979.0, 800.0, 850.0],'total_offer_amount': [400.0, 400.0, 400.0, 200.0, 250.0],'sale_ord_valid_flag': [1, 1, 1, 0, 0]
})X = data[['user_actual_pay_amount', 'total_offer_amount']]
y = data['sale_ord_valid_flag']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
print(f'Accuracy: {accuracy}')
print(f'Confusion Matrix: \\n{cm}')

结果与判断:

通过预测订单有效性,可以优化订单审核流程,减少无效订单的产生。

3-决策树(Decision Tree)

场景:根据用户行为特征分类用户等级

  • 优点:易于理解和解释,可以处理非线性关系
  • 缺点:容易过拟合
  • 概念:通过一系列规则对数据进行分类或预测。
  • 公式:决策树根据特征值进行分裂,并构建一棵树状结构来表示决策过程。

代码示例:

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report# 数据
data = pd.DataFrame({'user_actual_pay_amount': [976.0, 978.99, 979.0, 800.0, 850.0, 900.0],'total_offer_amount': [400.0, 400.0, 400.0, 200.0, 250.0, 300.0],'user_lv_cd': [10, 10, 10, 0, 0, 1]
})X = data[['user_actual_pay_amount', 'total_offer_amount']]
y = data['user_lv_cd']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
report = classification_report(y_test, y_pred)
print(f'Classification Report: \\n{report}')

结果与判断:

分类用户等级,帮助精准营销和个性化推荐。

4-随机森林(Random Forest)

场景:预测用户实际支付金额

  • 优点:降低过拟合,处理高维数据
  • 缺点:训练时间长,结果不易解释
  • 概念:由多个决策树组成的集成学习模型。
  • 公式:通过投票方式聚合多个决策树的预测结果来提高预测准确度。

代码示例:

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score# 数据
data = pd.DataFrame({'item_sku_id': [100000350860, 100000350861, 100000350862, 100000350863],'before_prefr_unit_price': [1499.0, 1599.0, 1399.0, 1299.0],'after_prefr_unit_price': [1099.0, 1199.0, 999.0, 899.0],'user_actual_pay_amount': [976.0, 978.99, 979.0, 875.0]
})X = data[['before_prefr_unit_price', 'after_prefr_unit_price']]
y = data['user_actual_pay_amount']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = RandomForestRegressor(n_estimators=100)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
r2 = r2_score(y_test, y_pred)
print(f'R2 Score: {r2}')

结果与判断:

预测用户支付金额,优化促销策略和定价。

5-支持向量机(SVM)

场景:分类订单是否取消

  • 优点:有效处理高维数据,适合小样本
  • 缺点:训练时间长,参数调优复杂
  • 概念:用于分类和回归的监督学习模型。
  • 公式:通过找到最大边距超平面来划分不同类别数据点

代码示例:

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 数据
data = pd.DataFrame({'user_actual_pay_amount': [976.0, 978.99, 979.0, 800.0, 850.0, 900.0],'total_offer_amount': [400.0, 400.0, 400.0, 200.0, 250.0, 300.0],'cancel_flag': [0, 0, 0, 1, 1, 1]
})X = data[['user_actual_pay_amount', 'total_offer_amount']]
y = data['cancel_flag']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = SVC()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

结果与判断:

预测订单是否取消,优化库存管理。

6-K-均值聚类(K-Means Clustering)

场景:用户行为数据聚类分析

  • 优点:易于实现和解释
  • 缺点:需要预先定义聚类数,不适用于非球形数据
  • 概念:将数据点划分为K个类别的无监督学习算法。
  • 公式:最小化每个聚类中数据点与该聚类中心的距离的平方和。

代码示例:

from sklearn.cluster import KMeans# 数据
data = pd.DataFrame({'user_actual_pay_amount': [976.0, 978.99, 979.0, 800.0, 850.0, 900.0],'total_offer_amount': [400.0, 400.0, 400.0, 200.0, 250.0, 300.0]
})X = data[['user_actual_pay_amount', 'total_offer_amount']]# 训练模型
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)# 聚类结果
data['cluster'] = kmeans.labels_
print(data)

结果与判断:

聚类用户行为数据,识别用户群体,制定个性化营销策略。

7-主成分分析(PCA)

场景:降维处理用户行为数据

  • 优点:降低数据维度,去除冗余信息
  • 缺点:解释性差,可能丢失有用信息
  • 概念:降维技术,用于发现数据中的主要特征。
  • 公式:通过线性变换将原始数据映射到低维空间,使得数据在新空间中的方差最大化。

代码示例:

from sklearn.decomposition import PCA# 数据
data = pd.DataFrame({'user_actual_pay_amount': [976.0, 978.99, 979.0, 800.0, 850.0, 900.0],'total_offer_amount': [400.0, 400.0, 400.0, 200.0, 250.0, 300.0]
})X = data[['user_actual_pay_amount', 'total_offer_amount']]# 降维处理
pca = PCA(n_components=1)
principalComponents = pca.fit_transform(X)
data['principal_component'] = principalComponents
print(data)

结果与判断:

降维处理后,数据可视化更容易,识别主成分,简化模型。

8-时间序列分析(Time Series Analysis)

场景:销售数据时间序列预测

  • 优点:适用于时间相关数据,预测未来趋势
  • 缺点:需要时间顺序数据,复杂性高
  • 概念:研究时间序列数据的模式、趋势和周期性,并用于预测未来值。
  • 公式:时间序列模型可以包括自回归模型(AR)、移动平均模型(MA)、自回归移动平均模型(ARMA)、自回归积分移动平均模型(ARIMA)等。

代码示例:

import pandas as pd
from statsmodels.tsa.arima.model import ARIMA# 数据
data = pd.Series([976, 978.99, 979, 800, 850, 900], index=pd.date_range(start='2020-01-01', periods=6, freq='M'))# 训练模型
model = ARIMA(data, order=(1, 1, 1))
model_fit = model.fit()# 预测
forecast = model_fit.forecast(steps=3)[0]
print(f'Forecast: {forecast}')

结果与判断:

预测未来销售趋势,帮助库存管理和销售计划。

9-关联规则分析(Association Rule Learning)

场景:购物篮分析

  • 优点:发现项间关联规则,适合市场篮子分析
  • 缺点:计算复杂度高,规则解释性差
  • 概念:用于发现数据集中的物品之间的关联关系,常用于购物篮分析和市场篮分析。
  • 公式:关联规则通常表示为“A ➞ B”的形式,其中A和B是物品集合,相关性通过支持度和置信度来衡量。

代码示例:

from mlxtend.frequent_patterns import apriori, association_rules# 数据
data = pd.DataFrame({'milk': [1, 1, 0, 0, 1],'bread': [1, 1, 1, 0, 1],'butter': [0, 1, 1, 0, 1]
})# 频繁项集
frequent_itemsets = apriori(data, min_support=0.6, use_colnames=True)
# 关联规则
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
print(rules)

结果与判断:

发现商品间的关联规则,优化商品组合销售和促销策略。

10-XGBoost

场景:提升模型的预测精度

  • 优点:处理大规模数据,预测精度高
  • 缺点:模型复杂,计算资源消耗大
  • 概念:集成学习方法,通过训练多个弱分类器并加权组合得到一个强分类器。
  • 公式:使用加权投票来提高分类准确率,弱分类器的误差率会影响其权重。

代码示例:

import xgboost as xgb
from sklearn.metrics import mean_squared_error# 数据
data = pd.DataFrame({'item_sku_id': [100000350860, 100000350861, 100000350862, 100000350863],'before_prefr_unit_price': [1499.0, 1599.0, 1399.0, 1299.0],'after_prefr_unit_price': [1099.0, 1199.0, 999.0, 899.0],'user_actual_pay_amount': [976.0, 978.99, 979.0, 875.0]
})X = data[['before_prefr_unit_price', 'after_prefr_unit_price']]
y = data['user_actual_pay_amount']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = xgb.XGBRegressor(objective ='reg:squarederror')
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

结果与判断:

通过提升模型的预测精度,优化业务决策和营销策略。

相关文章:

  • 万界星空科技定制化MES系统帮助实现数字化生产
  • 自建公式,VBA在Excel中解一元一次方程
  • docker命令总结
  • upload-labs 21关解析
  • 手把手教你写Java项目(1)——流程
  • 什么是深拷贝和浅拷贝?
  • 微服务架构的优势 与 不足
  • 常见排序算法之选择排序
  • 内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机
  • 微信生态系统介绍
  • Android 待办类应用提醒功能的实现及其问题
  • ⌈ 传知代码 ⌋ 高速公路车辆速度检测软件
  • 全同态加密生态项目盘点:FHE技术的崛起以及应用
  • 编译链接问题
  • 面试的内容
  • AWS实战 - 利用IAM对S3做访问控制
  • CentOS6 编译安装 redis-3.2.3
  • ECS应用管理最佳实践
  • javascript数组去重/查找/插入/删除
  • linux学习笔记
  • vue-cli在webpack的配置文件探究
  • 分享几个不错的工具
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 力扣(LeetCode)21
  • 目录与文件属性:编写ls
  • 前端攻城师
  • 跳前端坑前,先看看这个!!
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 自制字幕遮挡器
  • Nginx实现动静分离
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (BFS)hdoj2377-Bus Pass
  • (k8s)Kubernetes本地存储接入
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (九十四)函数和二维数组
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (算法)求1到1亿间的质数或素数
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转) Android中ViewStub组件使用
  • ./configure,make,make install的作用
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .Net mvc总结
  • .Net Web窗口页属性
  • .Net 基于IIS部署blazor webassembly或WebApi
  • .net反编译工具
  • .Net小白的大学四年,内含面经
  • .NET周刊【7月第4期 2024-07-28】
  • /etc/sudoer文件配置简析
  • @DS 多数据源 + @Transactional(rollbackFor = Exception.class) 导致@DS 多数据源没法使用
  • @JSONField或@JsonProperty注解使用
  • @requestBody写与不写的情况
  • [14]内置对象