基于python多准则决策分析的汽车推荐算法设计与实现

摘要

随着汽车市场的快速发展和消费者需求的多样化,汽车选择变得愈加复杂。为了帮助消费者在众多汽车选项中做出明智的决策,基于多准则决策分析(MCDA)的汽车推荐算法应运而生。本研究旨在设计和实现一种基于 Python 的汽车推荐系统,利用多准则决策分析方法为用户提供个性化的汽车推荐。

本研究首先收集了汽车市场上多款车型的相关数据,包括价格、油耗、安全性、舒适性、维护成本、品牌声誉等多个评价指标。这些指标被认为是影响消费者购车决策的重要因素。接着,采用层次分析法(AHP)对各指标进行权重赋值,以反映其对消费者决策的重要性。通过专家访谈和问卷调查,收集数据并确定每个指标的权重,使得推荐算法更具针对性和实用性。

在构建推荐模型时,本研究采用了TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)方法。该方法通过计算每个汽车选项与理想解和负理想解的距离,进行综合评价,从而为用户提供排名。具体而言,首先对数据进行标准化处理,以消除不同指标之间的量纲影响。然后,依据事先确定的权重计算每款车型的综合得分,最后按照得分高低为用户推荐最符合其偏好的汽车。

为了提升算法的可用性和用户体验,本系统搭建了基于 Flask 的 Web 应用,用户可以通过友好的界面输入个人需求和偏好,系统将自动生成推荐结果。此外,系统还提供多种可视化图表,帮助用户更直观地理解各车型的优缺点及其推荐理由。

经过实验和用户反馈,本研究的汽车推荐系统展示了良好的性能和用户满意度。测试结果表明,基于多准则决策分析的推荐算法能够有效满足用户的购车需求,为其提供切实可行的推荐方案。这一研究不仅丰富了汽车推荐领域的理论基础,也为实际购车决策提供了有力支持。未来,研究将进一步探索更多的决策方法和深度学习技术,以增强推荐系统的智能化水平和准确性。

数据读取与预处理

df=pd.read_excel('/home/mw/input/car9730/汽车之家数据.xlsx')
#去除重复值
df.drop_duplicates(subset=['标题'],inplace=True)

AHP法确定指标权重

第一步:定义特征列表

第二步:创建判别矩阵

根据特征列表,提示用户逐对比较每两个特征的重要性。用户需要根据以下标度输入每对特征的相对重要性:

1:两个特征同等重要

3:第一个特征略微重要于第二个特征

5:第一个特征明显重要于第二个特征

7:第一个特征强烈重要于第二个特征

9:第一个特征极其重要于第二个特征

2, 4, 6, 8:介于上述值之间

第三步:计算权重向量

def ahp_weight_calculation(matrix):
    """
    计算AHP权重和一致性比率
    :param matrix: 判断矩阵 (n x n)
    :return: 权重向量, 一致性比率CR
    """
    #1。计算特征值和特征向量
    eigenvalues, eigenvectors = np.linalg.eig(matrix)
    # 2.找到最大特征值的索引
    max_eigenvalue_index = np.argmax(eigenvalues)
    # 3。获取最大特征值
    max_eigenvalue = eigenvalues[max_eigenvalue_index]
    # 4.获取对应的特征向量
    max_eigenvector = eigenvectors[:, max_eigenvalue_index]
    #权重归一化
    weights = max_eigenvector / np.sum(max_eigenvector)
    return weights, max_eigenvalue

第四步:一致性检验

根据特征数量查找随机一致性指标RI并计算一致性比率CR,CR<0.1即通过一致性检验

车特征权重构建

复制代码
按照以下标度输入每对特征的重要性比较值:
1 - 相同重要性
3 - 略微重要
5 - 明显重要
7 - 强烈重要
9 - 极其重要
2, 4, 6, 8 - 介于上述值之间
例如,如果特征A相对于特征B略微重要,则输入3。

特征 '价格' 相对于特征 '排量' 的重要性:
复制代码
特征 '价格' 相对于特征 'NEDC纯电续航里程' 的重要性:
复制代码
特征 '排量' 相对于特征 'NEDC纯电续航里程' 的重要性:

TOPSIS综合评分

数据清洗

#根据市场需求,主要选择【价格,排量,NEDC纯电续航里程】等特征来进行建模
features=['价格', '排量', 'NEDC纯电续航里程']
# 根据评价指标读取对应数据
data=df[features].copy()
#设置索引为车辆名称
data.index=df['标题']
# 定义单位去除函数
def remove_units(value):
    return float(''.join(filter(str.isdigit, value)))
# 对字符字段应用函数
data['排量'] = data['排量'].apply(remove_units)
#去除包含缺失值的行
data.replace(0, np.nan,inplace=True)
data.dropna(inplace=True)
data['NEDC纯电续航里程'] = data['NEDC纯电续航里程'].apply(remove_units)
#去除重复值
data.drop_duplicates(inplace=True)

指标一致化

在进行综合评分之前,我们需要对所有的指标进行一致化处理,将其都转换为极大型指标,从而使得综合评分越高,推荐度越高。

指标标准化

为了消除不同指标间量纲导致的不一致,因此还需要对各指标进行标准化处理,统一到0-1区间内

计算TOPSIS综合评分

从结果上来看,如果用户对于价格偏好最高,续航里程次之,排量最不关注的话,可选的车型如上所示,以上车型都是属于价格偏低,排量较小,同时续航里程相对较长的性价比之选,一定程度上符合用户预期,也证明了我们所使用的TOPSIS模型结合AHP决策的方法一定程度上能考虑用户的需求偏好

相关推荐
春天的菠菜8 分钟前
【django】Django REST Framework (DRF) 项目中实现 JWT
后端·python·django·jwt
Learning改变世界10 分钟前
Python快速安装软件包到环境的方案
开发语言·python
weixin_5436628618 分钟前
BERT的中文问答系统28
人工智能·python·bert
chusheng184032 分钟前
Python 三维图表绘制指南
开发语言·python
CodeHackerBhx38 分钟前
归并排序和随机化快速排序
数据结构·算法·排序算法
摆烂小白敲代码40 分钟前
背包九讲——背包问题求具体方案
c语言·c++·算法·背包问题·背包问题求具体方案
爱写代码的小朋友1 小时前
使用 Python 和 OpenCV 实现实时人脸识别
开发语言·python·opencv
Matlab程序猿小助手1 小时前
【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障碍物顶点2.删除中间多余节点,减少转折。
开发语言·嵌入式硬件·算法·matlab·机器人
我就说好玩1 小时前
2020年美国总统大选数据分析与模型预测
大数据·python·数据挖掘·数据分析·pandas·sklearn
时髦的琉璃681 小时前
GHuNeRF: Generalizable Human NeRF from a Monocular Video
算法