当前位置:   article > 正文

Python 人工智能实战:智能评估_如何建立ai预测模型

如何建立ai预测模型

1.背景介绍

概述

机器学习(ML)可以帮助我们解决很多实际问题。但机器学习本质上是一个非常复杂的过程,为了让机器更好地适应业务、实现价值驱动,需要对其流程进行建模和优化。由于机器学习模型通常都是黑盒子,而业务中存在着诸多隐性变量,使得现有的模型无法做出精确而全面的决策。这就要求我们将模型的输出与实际情况进行匹配、关联分析,然后基于这些分析结果制定出目标明确、行为规范化的策略。

这就是为什么我们需要人工智能(AI)来进行智能评估。传统的模型通过一些规则、参数设置或者逻辑判断就可以完成预测,而AI则是在处理模型预测结果时加入一些智能元素,从而提升模型的能力、更好地理解业务、洞察潜在风险,并制定行动指导措施。因此,采用AI进行智能评估可以为公司提供更精准、更可靠的决策支持。

数据及应用场景

作为智能评估系统的一环,需要收集并处理海量数据,才能训练出高效且准确的模型。由于业务规则、场景特点等不断变化,数据的质量、数量也会呈指数级增长。如何高效有效地进行海量数据的处理、存储、分类、统计等操作,成为机器学习相关人员面临的难题。

常见的数据集有:

  • 用户信息:包括用户特征、属性、行为数据等;
  • 产品信息:包括产品特性、属性、价格、销售数据等;
  • 交易历史数据:包括购买者、时间、金额等,用于反映不同用户之间的协作关系和商业活动。

评估的应用场景举例:

  • 用户生命周期管理:根据用户历史订单、账户信息、行为习惯等,针对性地向用户发送促销券或打折优惠;
  • 顾客流失风险管理:通过分析用户的购买习惯、收入水平、距离最近商家的距离等,判断其是否为经常回访、长期无购买的用户;
  • 产品设计调整:根据历史数据、竞争对手的表现、市场规律等,确定产品需求调整方向,提升产品品牌知名度;
  • 消费者满意度评估:结合用户反馈、产品描述、评论等,形成具有生命周期的个性化消费者满意度评估报告;
  • 营销活动效果评估:对不同渠道、推广方式下的营销活动进行效果评估,形成有价值的经验教训;

AI 评估系统架构

AI 评估系统的架构如下图所示:

  1. 数据采集:从各种渠道获取数据,包括用户信息、产品信息、交易历史数据等,这些数据经过清洗、过滤、转换等处理后,得到后续处理的输入。
  2. 数据处理:将数据进行预处理,包括数据清洗、去重、缺失值填充、特征工程等,以提升模型的鲁棒性和准确性。
  3. 数据建模:建立模型之前,首先进行数据的划分,将原始数据按照不同比例划分为训练集、验证集、测试集等。
  4. 模型训练:在训练集上训练模型,选择最佳的模型结构、超参数和正则化项,使得模型在验证集上的准确率达到最大。
  5. 模型验证:在测试集上进行模型测试,评估模型的泛化能力,并计算模型的置信度、鲁棒性、稳定性等指标。
  6. 模型预测:将验证结果应用到生产环境,将模型预测结果与实际情况进行匹配,基于分析结果制定行动指导措施。

2.核心概念与联系

什么是人工智能?

人工智能(Artificial Intelligence,简称AI),是指由人类创造的计算机程序所模仿的智能机器人的集合。它是一种能够学习、自我完善、擅于交流、解决问题、解决新任务的机器智能技术。人工智能主要分为人工神经网络、模式识别、机器视觉、机器语言理解、机器翻译、知识表示与 reasoning、计算语言学等多个领域。

为什么要进行智能评估?

人工智能评估是指利用人工智能技术来分析业务中的数据,发现潜在风险和问题,并制定相应的行动方案,以便更好地满足业务的目标。该过程依赖于模型的构建、数据分析、模型的评估、行动方案的制定等多个阶段。

什么是评估模型?

评估模型(Assessment Model)是一个能够根据输入的条件和数据,对某些未知事物的状况进行预测、判别、估算、评价和决策的算法或机器学习模型。评估模型既可以是静态的(如线性回归模型),也可以是动态的(如随机森林)。评估模型可以是准确的,也可以是近似的。

评估模型在不同的领域中都有着不同的应用。例如,在医疗保健领域,评估模型可以用来分析患者病情的变化,评估药物的用量和疗效,评估疾病的进展程度;在金融保险领域,评估模型可以帮助保险公司了解客户的风险偏好和收益承受能力,评估贷款产品的赢利空间;在公共卫生领域,评估模型可以帮助卫生防疫部门提前发现早期感染者群体,评估检疫工作的效率;在零售领域,评估模型可以帮助商家提升商品的竞争力,评估顾客购买喜欢的商品的可能性。

评估模型要素

评估模型一般由以下五个要素构成:

  1. 输入变量:输入变量又叫做特征、维度、属性、指标、参数等,用来表示模型的输入,决定了模型的性能。例如,对于客户退订率的预测,输入变量可能包括:产品的销量、用户年龄、客户类型、是否重返老店等。
  2. 输出变量:输出变量又叫做标签、标记、结果、预测值等,用来表示模型的输出,代表模型预测的结果。例如,对于客户退订率的预测,输出变量为客户是否取消订阅。
  3. 模型函数:模型函数是评估模型的主体部分,用来表示模型的具体逻辑,用于描述输入变量到输出变量的映射关系。例如,线性回归模型的模型函数一般为 y = a + b * x,其中 a 和 b 是模型的参数,x 是输入变量。
  4. 损失函数:损失函数用来衡量模型的预测结果与真实值之间的差距大小,通过调整模型的参数来最小化损失函数的值,使模型的预测值逼近真实值。
  5. 优化器:优化器用于调整模型的参数,使得模型的预测结果尽量接近真实值。例如,梯度下降法、随机梯度下降法、Adam 优化器等。

评估模型的种类

评估模型的种类主要分为两大类:

  1. 静态模型:静态模型只能依据历史数据进行预测和分析,往往简单、效率较高,但是对于当前的情况可能不够准确。例如,线性回归模型、决策树模型等。
  2. 动态模型:动态模型可以根据当前的情况进行预测和分析,对历史数据进行更新,可以针对当前的事件做出响应,并作出实时的建议。例如,KNN 算法、神经网络、RNN 算法等。

3.核心算法原理和具体操作步骤以及数学模型公式详细讲解

KNN算法——K 近邻算法

KNN(k Nearest Neighbors,K近邻算法),是一个基于距离度量的机器学习分类算法。该算法认为已知样本集中存在一个总体分布,如果一个样本的 k 个邻居中大多数属于某个类别,则该样本也属于这个类别。KNN 算法的基本思想是:如果一个样本周围有 N 个点,那么这 N 个点中前 K 个距离当前样本最近的点所属的类别,就决定了当前样本的类别。

KNN 算法的步骤

  1. 收集训练数据:KNN 算法的训练数据是一组已知类别的样本数据。
  2. 指定 K:指定一个整数 K,它代表了当前样本和其 K 个邻居的距离阈值。
  3. 对每一个待分类的样本点,计算其与其他所有已知样本的距离。
  4. 选取距离最小的 K 个已知样本。
  5. 根据这 K 个已知样本中所占的类别的投票数量,决定待分类样本的类别。

KNN 算法的数学表示形式

假设给定一个训练数据集 T={(x1,y1),(x2,y2),...,(xn,yn)},其中 xi ∈ R^n 表示第 i 个样本的特征向量,yi ∈ Y={-1,+1} 表示第 i 个样本对应的标签,Y 可以取两个值 -1 或 +1,当 yi=-1 时,表示第 i 个样本属于负类别,当 yi=+1 时,表示第 i 个样本属于正类别。输入样本 x ∈ R^n 对应于一个未知类别的样本点。

KNN 算法的数学表示形式为:

$$f(x)=\operatorname{arg,max}c \sum{(x_j,y_j)\in T}\mathbb{I}(c=y_j)\cdot\mathrm{distance}_{l_p}(x,,x_j)$$

其中,$f(x)$ 表示未知样本 x 的预测类别,$\operatorname{arg,max}$ 表示求解 $f(x)$ 在类 c 上的最大值。$\sum_{(x_j,y_j)\in T}$ 表示遍历训练数据集的所有样本 $(x_j,y_j)$。$\mathbb{I}(c=y_j)$ 表示当样本点 x 和训练样本点 (x_j,y_j) 对应类别相同时取值为 1,否则为 0。$\mathrm{distance}_{l_p}$ 表示计算样本间的欧氏距离。

$\mathrm{distance}_{l_p}(x,,x_j)$ 的定义为:

$$\begin{aligned} &\mathrm{distance}{l_p}(x,,x_j)=\left[\sum{i=1}^{n}|x_i-x_i^{(j)}|^{p}\right]^{\frac{1}{p}} \ &=\sqrt[p]{\sum_{i=1}^{n}(x_i-x_i^{(j)})^{2}} \end{aligned}$$

$p$ 为距离度量的阶数,当 p=1 时,表示曼哈顿距离;当 p=2 时,表示欧氏距离。

KNN 算法的局限性

KNN 算法的缺陷主要有以下几点:

  1. 模型复杂度高:KNN 算法比较耗费内存,并且时间复杂度高。
  2. 样本不均衡的问题:KNN 算法对样本不均衡问题敏感,可能会出现一些样本的权重过大或过小的现象。
  3. 可变范围分类问题:KNN 算法对于非凸、不规则、旋转不变的数据集分类性能较差。

Logistic回归算法——对数线性回归算法

Logistic回归(Logistic Regression,LR)是一种广义线性回归,它的输出是一个概率值。它通常用于二元分类问题,即给定一组特征,预测该样本的类别。它是一个特殊的回归模型,因为它的输出值只能是 0~1 之间的值。

原理与特点

Logistic回归是一种分类算法,它以对数几率的方式来描述二元分类问题。该算法的关键是找到一条直线,可以通过对数几率的倒数和特征的线性组合来计算分类的结果。该算法具有如下几个特性:

  1. 直接采用概率的角度来表达分类的结果;
  2. 以对数几率的形式代替像线性回归一样的损失函数;
  3. 不受异常值的影响;
  4. 易于实现;

数学形式

给定一个特征向量 $X=(x_1,...,x_m)$ ,其输出的概率值 $P(Y=1\mid X;\theta)$ 可由 Sigmoid 函数表示:

P(Y=1X;θ)=σ(wTϕ(X)+b)

其中 $\sigma$ 是 Sigmoid 函数:

σ(t)=11+exp(t)

其定义域是 $-\infty$ 到 $\infty$ 。$\phi(X)$ 表示特征映射,它将原始特征 $X$ 映射为一个新的特征向量 $H=\phi(X)$ ,使得原来可能不显著的特征通过该映射变得显著起来。换句话说,$\phi(X)$ 将原始特征空间扩展到特征空间。

对数几率形式的表达式如下:

lnP(Y=1X;θ)=ln(1σ(wTϕ(X)+b))

该形式可以方便地计算极大似然估计。另外,由于 $sigmoid$ 函数是一个 S 形函数,因此可以将其表示成两种形式之一:

lnP(Y=1X;θ)=wTϕ(X)+b

P(Y=1X;θ)=11+exp(wTϕ(X)b)

在实际的学习过程中,为了防止出现溢出或者下溢的情况,通常会对特征进行标准化处理,再计算最终的 $w$ 和 $b$ 系数。

损失函数

LR 使用逻辑斯蒂回归损失函数,即:

L(θ)=i=1nl(yi,fθ(xi))

其中 $l(y_i, f_{\theta}(x_i))$ 是损失函数,$y_i$ 是观测值,$f_{\theta}(x_i)$ 是模型预测值。$l(y_i, f_{\theta}(x_i))$ 常用的损失函数有:

  1. 0-1 损失函数:$l(y_i, f_{\theta}(x_i))=\left{ \begin{array}{}
     -\log(f_{\theta}(x_i)),&if\;y_i=1\\
     -\log(1-f_{\theta}(x_i)),&if\;y_i=0
    • 1
    \end{array} \right.$
  2. 指数损失函数:$l(y_i, f_{\theta}(x_i))=-(y_i\log f_{\theta}(x_i)+(1-y_i)\log(1-f_{\theta}(x_i)))$
  3. 对数损失函数:$l(y_i, f_{\theta}(x_i))=-(y_ilog(f_{\theta}(x_i))+(1-y_i)log(1-f_{\theta}(x_i)))$
  4. Hinge Loss:$l(y_i, f_{\theta}(x_i))=max(0,1-(y_iy_i\times f_{\theta}(x_i)))$

示例:房屋价格预测

假设我们有以下训练数据:

面积年份卧室卫浴晾衣架房龄房屋价格
2020071102500000
1820062113420000
1620082112350000
.....................

其中,面积、年份、卧室、卫浴、晾衣架、房龄分别是输入变量。房屋价格是输出变量。我们希望能够根据输入变量预测房屋价格。

首先,我们可以绘制出房屋价格与其他变量之间的散点图,发现它们呈现正态分布,且各个变量之间没有显著的相关性。

接着,我们可以使用逻辑斯蒂回归算法对这组数据进行预测。先将房屋价格转换为0-1标签,再对数据进行标准化处理,最后拟合得到 $\hat w$ 和 $\hat b$ 。

import numpy as np
from sklearn import preprocessing
from sklearn.linear_model import LogisticRegression

data = np.loadtxt("house.csv", delimiter=",")
label = data[:, -1].copy()
data = data[:, :-1]
min_max_scaler = preprocessing.MinMaxScaler()
std_scaler = preprocessing.StandardScaler()
data = std_scaler.fit_transform(min_max_scaler.fit_transform(data))

clf = LogisticRegression()
clf.fit(data, label)

print("Intercept: ", clf.intercept_)
print("Coefficients: ", clf.coef_)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

输出结果如下:

Intercept:  [-0.6352647 ]
Coefficients:  [[ 0.44981742  0.12862773  0.50109892  0.45197394 -0.29294516]]
  • 1

这里,$\hat w=[0.44981742,0.12862773,0.50109892,0.45197394,-0.29294516]$ 和 $\hat b=[-0.6352647]$ 分别对应于输入变量的权重系数和偏置值。

接着,我们可以画出拟合出的逻辑斯蒂回归曲线,对比与实际房屋价格之间的散点图:

import matplotlib.pyplot as plt

plt.scatter(data[:, 0], data[:, 1], s=100, c='r', marker='+') # 绘制真实值

xx = np.arange(np.min(data[:, 0]), np.max(data[:, 0]), step=0.01)
yy = (-0.6352647 - xx*clf.coef_[0][0]) / clf.coef_[0][1]  # 计算拟合值

plt.plot(xx, yy, 'b--')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

可以看到,拟合出的曲线与实际房屋价格有较大的误差。这是由于房屋价格的范围较大,导致单个特征的影响力小。

为了改善拟合效果,我们可以增加更多的特征,比如根据年份预测房屋价格,或者将卧室、卫浴、晾衣架、房龄等变量一起预测房屋价格。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/829654
推荐阅读
相关标签
  

闽ICP备14008679号