基于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决策的方法一定程度上能考虑用户的需求偏好

相关推荐
枫哥和java1 小时前
python serializer, model drf通过序列化器, 模型获取mysql 一张表某个字段数据库现存的最大值
数据库·python·mysql
无忧无虑Coding3 小时前
pyinstall 打包Django程序
后端·python·django
Tisfy3 小时前
LeetCode 3240.最少翻转次数使二进制矩阵回文 II:分类讨论
算法·leetcode·矩阵·题解·回文·分类讨论
橘子遇见BUG4 小时前
算法日记 31 day 动态规划(01背包)
算法·动态规划
东方巴黎~Sunsiny4 小时前
java-图算法
java·开发语言·算法
ac-er88884 小时前
PHP二维数组排序算法函数
算法·php·排序算法
Tisfy5 小时前
LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))
算法·leetcode·题解·贪心·思维
ad禥思妙想5 小时前
如何运行python脚本
开发语言·python
Matlab程序猿小助手5 小时前
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·嵌入式硬件·算法·matlab·机器人·无人机
威威猫的栗子5 小时前
用 Python 与 Turtle 创作属于你的“冰墩墩”!
开发语言·python·turtle