【ShuQiHere】 探索数据挖掘的世界:从概念到应用

🌐 【ShuQiHere】

数据挖掘(Data Mining, DM) 是一种从大型数据集中提取有用信息的技术,无论是在商业分析、金融预测,还是医学研究中,数据挖掘都扮演着至关重要的角色。本文将带您深入了解数据挖掘的核心概念、经典方法,以及它在日常生活和商业中的应用场景。

什么是数据挖掘?🤖

数据挖掘的定义与背景

数据挖掘(Data Mining, DM) 是从庞大且复杂的数据集中发现模式和有用信息的过程。它是**知识发现过程(KDD, Knowledge Discovery in Databases)**的核心步骤,旨在从数据中提取结构化的信息和知识,帮助企业和研究人员做出更明智的决策。

数据挖掘是机器学习(Machine Learning)、**统计学(Statistics)数据库系统(Database Systems)**等学科的交汇点。它的核心目标是从大量数据中提取信息,并将其转化为可理解的结构,用于进一步分析或决策。数据挖掘在商业、金融、医疗、社交网络分析等领域都有广泛应用。

数据挖掘的优势与挑战

优势

  • 高效分析:能够从大规模数据集中发现隐藏的模式和趋势,帮助企业快速获取洞见。
  • 实时性:允许实时分析复杂的数据,有助于关键任务系统的决策。
  • 多领域应用:适用于各种行业,包括零售、银行、保险、制造业等。

挑战

  • 数据隐私和安全:需要处理大量的个人和敏感信息,因此隐私和安全问题需要特别关注。
  • 数据质量:数据的完整性、准确性和一致性直接影响挖掘结果的可靠性。
  • 复杂性:处理高维度和非结构化数据需要复杂的算法和计算资源。

知识发现过程(KDD Process):数据挖掘的五个关键步骤📊

知识发现过程(Knowledge Discovery in Databases, KDD) 是一个系统的框架,用于从原始数据中提取知识。KDD过程包括以下五个步骤:

  1. 选择(Selection):从原始数据集中选择合适的数据子集。
  2. 预处理(Preprocessing):清理和准备数据,确保数据的准确性和一致性。
  3. 转换(Transformation):将数据转换为适合数据挖掘的格式,如规范化、离散化等。
  4. 数据挖掘(Data Mining):使用不同的技术挖掘数据中的模式和关系。
  5. 解释与评估(Interpretation & Evaluation):对挖掘出的结果进行分析和解释,以便做出有用的决策。

1989年,Gregory Piatetsky-Shapiro提出的KDD过程已经成为现代数据挖掘的基础架构。

KDD过程的详细解读

  1. 选择(Selection)

    • 目标:确定分析目标,选择相关的数据集。
    • 方法:使用查询、采样等技术提取数据。
  2. 预处理(Preprocessing)

    • 目标:处理缺失值、噪声和异常值,确保数据质量。
    • 方法:数据清理、数据补全、异常检测。
  3. 转换(Transformation)

    • 目标:将数据转换为适合挖掘的形式。
    • 方法:规范化、标准化、特征提取、降维(如PCA)。

    公式示例(数据归一化):

    x norm = x − x min x max − x min x_{\text{norm}} = \frac{x - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}} xnorm=xmaxxminxxmin

  4. 数据挖掘(Data Mining)

    • 目标:应用算法发现数据中的模式和关系。
    • 方法:分类、聚类、关联规则、回归分析等。
  5. 解释与评估(Interpretation & Evaluation)

    • 目标:评估模型的有效性,解释结果。
    • 方法:可视化、统计指标(如准确率、召回率)、业务理解。

💼 实际案例:

金融预测:通过分析股票市场的历史交易数据,结合KDD过程,可以构建预测模型来预测未来市场的走势。这个过程包括数据清理(处理缺失值、异常值)、数据转换(归一化、特征提取)、应用回归分析或时间序列模型,最终形成可以帮助投资者做出决策的模型。


数据预处理:确保数据质量的重要步骤🚿

在数据挖掘过程中,数据预处理是至关重要的环节,因为现实世界中的数据通常是“不完美的”,即包含错误、缺失值或不一致的记录。数据预处理的目标是清理和转换数据,使其适合进一步分析。

数据清理(Data Cleaning)🧽

数据清理是处理数据中的噪声、缺失值和不一致数据的过程。

  • 缺失数据(Missing Data)

    • 处理方法
      • 删除记录:如果缺失值占比很小,可以删除包含缺失值的记录。
      • 数据填充:使用均值、中位数、众数或预测模型来填充缺失值。

    示例代码(使用均值填充缺失值,Python/Pandas):

    import pandas as pddf = pd.read_csv('data.csv')
    df.fillna(df.mean(), inplace=True)
    
  • 噪声数据(Noisy Data)

    • 处理方法
      • 分箱(Binning):将数据划分为多个区间,用区间的均值或中位数替代原始值。
      • 回归(Regression):使用回归模型预测和替换异常值。
      • 平滑(Smoothing):使用移动平均等方法平滑数据。
  • 不一致数据(Inconsistent Data)

    • 处理方法
      • 数据校验规则:定义规则检测不一致,如年龄与出生日期不符。
      • 数据转换:统一数据格式和单位。

数据集成(Data Integration)🔗

数据集成是将来自不同来源的数据进行合并,形成一个一致的数据库。

  • 数据合并(Data Consolidation)

    • 方法:将多个数据源的数据物理地合并到一个存储中。
    • 挑战:处理不同数据源的冲突和冗余。
  • 数据传播(Data Propagation)

    • 方法:通过ETL(Extract, Transform, Load)流程,将数据从一个源复制到另一个源。
    • 注意:需要确保数据的一致性和完整性。
  • 数据虚拟化(Data Virtualization)

    • 方法:创建一个虚拟的统一视图,实时访问不同的数据源。
    • 优势:无需实际移动数据,降低了存储成本。

数据转换(Data Transformation)🔄

将数据转换为适合挖掘的形式是非常重要的步骤。

  • 数据规范化(Normalization)

    • 目的:消除不同属性之间数值范围的差异。

    • 方法

      • 最小-最大规范化

        x norm = x − x min x max − x min x_{\text{norm}} = \frac{x - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}} xnorm=xmaxxminxxmin

      • Z-Score规范化

        z = x − μ σ z = \frac{x - \mu}{\sigma} z=σxμ

  • 数据离散化(Discretization)

    • 目的:将连续数据转换为离散数据,适用于某些算法。
    • 方法:等频分箱、等宽分箱、聚类等。

数据预处理的目标是确保数据的完整性、准确性和一致性,提高后续数据挖掘的效率和效果。


数据挖掘的经典方法📚

分类(Classification)

分类是数据挖掘中最常见的任务之一,它将数据分配到预定义的类别中。常用的分类算法有决策树(Decision Tree)支持向量机(SVM)、**朴素贝叶斯(Naive Bayes)**等。

  • 决策树(Decision Tree)

    • 原理:通过树形结构的模型,将数据根据特征值进行划分。

    • 算法:常用的构建算法有ID3、C4.5、CART等。

    • 示例

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 信息增益公式(以ID3算法为例)

      G a i n ( S , A ) = E n t r o p y ( S ) − ∑ v ∈ V a l u e s ( A ) ∣ S v ∣ ∣ S ∣ E n t r o p y ( S v ) Gain(S, A) = Entropy(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|} Entropy(S_v) Gain(S,A)=Entropy(S)vValues(A)SSvEntropy(Sv)

    • 代码示例(使用Python的scikit-learn库)

      from sklearn.tree import DecisionTreeClassifierX = [[0, 0], [1, 1]]
      y = [0, 1]
      clf = DecisionTreeClassifier()
      clf = clf.fit(X, y)
      

聚类(Clustering)

聚类是一种不需要预定义类别的分析方法,根据数据之间的相似性将数据分组。

  • K均值算法(K-Means Algorithm)

    • 原理:将数据划分为K个簇,使得簇内数据的相似性最大化,簇间差异最小化。

    • 算法步骤

      1. 初始化K个簇中心。
      2. 分配数据点到最近的簇中心。
      3. 更新簇中心为簇内数据点的均值。
      4. 重复步骤2和3,直到收敛。
    • 公式

      更新簇中心:

      μ k = 1 N k ∑ i = 1 N k x i \mu_k = \frac{1}{N_k} \sum_{i=1}^{N_k} x_i μk=Nk1i=1Nkxi

    • 代码示例(Python/scikit-learn)

      from sklearn.cluster import KMeansX = [[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]]
      kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
      

回归(Regression)

回归分析用于发现变量之间的函数关系,常用于预测数值型变量的趋势。

  • 线性回归(Linear Regression)

    • 原理:假设因变量 y y y与自变量 x x x之间存在线性关系。

      y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1 x + \epsilon y=β0+β1x+ϵ

    • 目标:找到最佳拟合线,使得误差平方和最小。

      最小化目标函数:

      min ⁡ β 0 , β 1 ∑ i = 1 n ( y i − β 0 − β 1 x i ) 2 \min_{\beta_0, \beta_1} \sum_{i=1}^n (y_i - \beta_0 - \beta_1 x_i)^2 β0,β1mini=1n(yiβ0β1xi)2

    • 代码示例(Python/scikit-learn)

      from sklearn.linear_model import LinearRegressionX = [[1], [2], [3], [4]]
      y = [2, 3, 5, 7]
      reg = LinearRegression().fit(X, y)
      

关联规则挖掘(Association Rule Mining)

关联规则挖掘常用于分析数据集中项之间的关联性。

  • Apriori算法

    • 目的:发现频繁项集和关联规则。

    • 支持度(Support)

      Support ( A → B ) = P ( A ∪ B ) \text{Support}(A \rightarrow B) = P(A \cup B) Support(AB)=P(AB)

    • 置信度(Confidence)

      Confidence ( A → B ) = P ( A ∪ B ) P ( A ) \text{Confidence}(A \rightarrow B) = \frac{P(A \cup B)}{P(A)} Confidence(AB)=P(A)P(AB)

    • 提升度(Lift)

      Lift ( A → B ) = Confidence ( A → B ) P ( B ) \text{Lift}(A \rightarrow B) = \frac{\text{Confidence}(A \rightarrow B)}{P(B)} Lift(AB)=P(B)Confidence(AB)

    • 代码示例(Python/mlxtend库)

      from mlxtend.frequent_patterns import apriori, association_rules# 假设df是一个包含交易记录的DataFrame
      frequent_itemsets = apriori(df, min_support=0.1, use_colnames=True)
      rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)
      

深度神经网络与数据挖掘💡

深度神经网络(Deep Neural Networks, DNN) 是现代数据挖掘中的重要技术,尤其是在处理大规模、复杂数据时表现出色。深度神经网络通过多层结构可以学习数据中的复杂模式,广泛应用于图像识别、自然语言处理、金融预测等领域。

深度学习的优势

  • 非线性映射能力:通过激活函数,引入非线性,使模型能够拟合复杂的函数关系。
  • 自动特征提取:无需手工提取特征,模型可以自动学习数据的高级特征。
  • 高精度:在大数据集上,深度学习模型通常比传统模型表现更佳。

深度神经网络的结构

  • 输入层(Input Layer):接收原始数据。
  • 隐藏层(Hidden Layers):包含多个神经元层,进行特征提取和转换。
  • 输出层(Output Layer):生成最终的预测结果。

数学原理

  • 神经元计算

    a ( l ) = f ( W ( l ) a ( l − 1 ) + b ( l ) ) a^{(l)} = f\left( W^{(l)} a^{(l-1)} + b^{(l)} \right) a(l)=f(W(l)a(l1)+b(l))

    • a ( l ) a^{(l)} a(l):第 l l l层的激活值。
    • W ( l ) W^{(l)} W(l):第 l l l层的权重矩阵。
    • b ( l ) b^{(l)} b(l):第 l l l层的偏置向量。
    • f f f:激活函数,如ReLU、Sigmoid、Tanh等。
  • 损失函数(Loss Function)

    • 用于衡量模型预测值与真实值之间的差异。
    • 常用的有均方误差(MSE)、交叉熵(Cross-Entropy)等。
  • 优化算法

    • 梯度下降(Gradient Descent):通过计算损失函数的梯度,更新模型参数。
    • 学习率(Learning Rate):控制参数更新的步长。

应用案例

  • 金融预测

    • 任务:预测股票价格走势。

    • 方法:使用LSTM(长短期记忆网络)处理时间序列数据。

    • 代码示例(Python/Keras)

      from keras.models import Sequential
      from keras.layers import LSTM, Densemodel = Sequential()
      model.add(LSTM(50, return_sequences=True, input_shape=(timesteps, features)))
      model.add(LSTM(50))
      model.add(Dense(1))
      model.compile(optimizer='adam', loss='mse')
      model.fit(X_train, y_train, epochs=100, batch_size=64)
      
  • 欺诈检测

    • 任务:识别信用卡交易中的欺诈行为。
    • 方法:使用自动编码器(Autoencoder)检测异常模式。

案例研究:在美国选择新的披萨店位置🍕

假设您是某披萨连锁店的数据科学家,任务是通过数据挖掘方法选择最佳的新店开设位置,并预测未来一年的销售额。数据挖掘方法可以帮助您完成以下任务:

  1. 选择最佳开店位置

    • 方法:使用聚类分析(Clustering)分类模型(Classification Models)

    • 步骤

      • 数据收集:收集美国各州的人口密度、收入水平、消费习惯等数据。
      • 数据预处理:清理数据,处理缺失值和异常值。
      • 聚类分析:使用K-Means算法将各地区分组,识别高潜力区域。
      • 分类模型:使用决策树或随机森林模型预测每个区域的销售潜力。
    • 代码示例

      # 聚类分析
      from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=5)
      kmeans.fit(location_data)
      labels = kmeans.labels_# 可视化结果
      import matplotlib.pyplot as pltplt.scatter(location_data['longitude'], location_data['latitude'], c=labels)
      plt.show()
      
  2. 产品组合优化

    • 方法:使用关联规则挖掘(Association Rule Mining)

    • 步骤

      • 数据收集:获取现有门店的销售数据和购物篮数据。
      • 数据预处理:将数据转换为适合Apriori算法的格式。
      • 挖掘关联规则:识别经常一起购买的产品组合。
    • 代码示例

      from mlxtend.frequent_patterns import apriori, association_rulesfrequent_itemsets = apriori(transaction_data, min_support=0.05, use_colnames=True)
      rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.2)
      
  3. 销售预测

    • 方法:使用回归分析(Regression Analysis)时间序列模型(Time Series Models)

    • 步骤

      • 数据收集:收集历史销售数据、季节性因素、促销活动等信息。
      • 模型构建:使用ARIMA、Prophet等模型预测未来销售额。
      • 模型评估:使用均方误差(MSE)、平均绝对误差(MAE)等指标评估模型性能。
    • 代码示例

      from statsmodels.tsa.arima_model import ARIMAmodel = ARIMA(sales_data, order=(1, 1, 1))
      model_fit = model.fit(disp=0)
      forecast = model_fit.forecast(steps=12)
      
  4. 优化销售策略

    • 方法:使用深度神经网络(DNN)

    • 步骤

      • 数据收集:整合销售数据、客户反馈、市场营销活动等多源数据。
      • 模型构建:建立一个多层神经网络,输入多维特征,输出销售预测或客户分类。
      • 模型训练:使用大量数据训练模型,提高预测精度。
      • 策略优化:根据模型结果,调整产品定价、促销活动、库存管理等策略。
    • 代码示例(Python/Keras)

      from keras.models import Sequential
      from keras.layers import Densemodel = Sequential()
      model.add(Dense(64, input_dim=feature_dim, activation='relu'))
      model.add(Dense(32, activation='relu'))
      model.add(Dense(1, activation='linear'))
      model.compile(optimizer='adam', loss='mse')
      model.fit(X_train, y_train, epochs=50, batch_size=32)
      

总结📌

数据挖掘是一个强大且灵活的工具,能够帮助我们从海量数据中提取有价值的信息。通过分类、聚类、回归和关联规则挖掘等方法,数据挖掘在商业、医疗、金融等多个领域都有着广泛的应用。深度神经网络的引入使我们能够处理更为复杂的模式,并在未来的智能决策中发挥更大的作用。

无论您是企业家、科学家还是研究人员,数据挖掘都能为您提供强大的洞察力。掌握数据挖掘技术,将为您的事业和研究带来不可估量的价值。


参考文献

  1. Han, J., Kamber, M., & Pei, J. (2011). Data Mining: Concepts and Techniques. Morgan Kaufmann.
  2. Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.
  3. Géron, A. (2019). Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. O’Reilly Media.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430314.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中小企业体系技术抽象沉淀-异地灾备篇

IT团队内部使用工具 系列文章:https://blog.csdn.net/caicongyang/article/details/136857045 DDL DML管控 https://github.com/hhyo/Archery/ flyway 文档编写 wiki 技术对外输出文档推荐gitbook 同城双活数据同步方案 总览: vivo 系列文章&#x…

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够: (1)分…

洪涝洪水滑坡灾害数据集 灾害 2300张 带标注 voc yolo

洪涝洪水滑坡灾害数据集 灾害 2300张 带标注 voc yolo 洪涝洪水滑坡灾害数据集 数据集描述 该数据集是一个专门用于检测和识别洪涝、洪水和滑坡等自然灾害的数据集,旨在帮助研究人员和开发者训练和评估基于深度学习的目标检测模型。数据集涵盖了两种常见的自然灾害…

8-----手机机型维修工具助手 功能较全 涵盖解锁 刷机 修复等选项 维修推荐

上图是一款功能较全的维修加密狗。目前可以无限制 任何人使用。看图片可以了解其中涵盖刷机 解锁 修复分区 查看短接图 安装驱动 修复基带等等选项。而且其中有针对各个机型型号的对应功能操作。以及一些rec5.0相关的操作选项。 通过此博文了解 ★★★★★此工具涵盖的一些…

【Java】JVM基本组成

一、JDK、JRE、JVM JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具; JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库JVM; …

项目集成sharding-jdbc

目录 项目集成sharding-jdbc 1.业务分析 2.数据库构建 3.分库分表策略 项目配置默认数据源 一:导入sharding-jdbc依赖 二:在application文件中编写配置 三:注释掉主配置文件中配置的数据源 注意:这里添加了spring.main.allow…

C++之初识STL(概念)

STL(标准模板库) STL广义分类为:容器,算法,迭代器 * **容器**和**算法**之间通过**迭代器**进行无缝连接 意义:C的**面向对象**和**泛型编程**思想,目的就是**复用性的提升** STL六大组件 1. 容…

ubuntu中通过源码安装pointnet2_ops_lib

注:本帖所用环境为:ubuntu 24.04、 cuda 12.04 文章目录 1. 克隆 PointNet 源码库2. 安装依赖3. 编译 pointnet2_ops_lib4. 测试安装 1. 克隆 PointNet 源码库 首先,克隆 PointNet 的 GitHub 仓库: git clone https://github.co…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

Fyne ( go跨平台GUI )中文文档-容器和布局 (四)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章: Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

基于Ambari搭建hadoop生态圈+Centos7安装教程V2.0优化版(本篇博客写的较为详细,可能比较多,请耐心看)

当我们学习搭建hadoop的时候,未免也会遇见很多繁琐的事情,比如很多错误,需要解决。在以后公司,也不可能让你一个一个搭建hadoop,成千上万的电脑,你再一个个搭建,一个个报错,而且每台…

初始main方法,标识符和关键字

1. 初识Java的main方法 1.1 main方法示例 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }图解: 通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构…

springbootKPL比赛网上售票系统

基于springbootvue实现的KPL比赛网上售票系统 (源码L文ppt)4-068 4.2 系统结构设计 架构图是系统的体系结构,体系结构是体系结构体系的重要组成部分。KPL比赛网上售票系统的总体结构设计如图4-2所示。 图4-2 系统总体架构图 4.3数据…

python全栈学习记录(十七)logging、json与pickle、time与datatime、random

logging、json与pickle、time与datatime、random 文章目录 logging、json与pickle、time与datatime、random一、logging二.json与pickle三.time与datatime四.random 一、logging logging模块用来记录日志信息。 import logging # 进行基本的日志配置 logging.basicConfig( fi…

全面详尽的 PHP 环境搭建教程

目录 目录 PHP 环境搭建概述 在 Windows 上搭建 PHP 环境 使用集成环境 XAMPP 安装步骤 配置和测试 常用配置 手动安装 Apache、PHP 和 MySQL 安装 Apache 安装 PHP 安装 MySQL 配置 PHP 连接 MySQL 在 Linux 上搭建 PHP 环境 使用 LAMP 方案 安装 Apache 安装 …

zabbix入门单机部署

zabbix官网 1进入官网后选择右上角Download 选择你要的版本以及需要的组件,网页下方会自动生成需要操作的步骤 ,跟着步骤一步一步安装即可: 这里跟着官网步骤一步步走下去就可以了 但是需要注意的是安装 yum install centos-release-scl源…

C++20 std::format

一、前言 1、传统 C 格式化的问题与挑战 可读性差:使用 C 中的 printf 和 scanf 家族函数进行格式化输出和输入时,它们的语法较为复杂,难以阅读。在较大的代码项目中,可读性差会导致维护困难。类型安全性差:printf 和…

vue入门小练习

文章目录 1.案例需求2.编程思路3.案例源码4.小结 1.案例需求 一个简易的计算器,其效果如下: 图片切换,其效果如下: 简易记事本,其效果如下: 2.编程思路 1.这个Vue.js应用实现了一个简单的计算器&#x…

中小微企业生产管理利器-- 超轻量生产工单系统

为解决中小微制造企业的生产管理难题,搭贝官方自主设计并推出了一款开箱即用的超轻量「生产工单系统」应用。该系统具备5分钟上手,3小时落地的优势,无需实施即可轻松实现生产任务的敏捷管理,同时支持自定义修改,能够适…

PostgreSQL的学习心得和知识总结(一百五十一)|[performance] PostgreSQL列对齐

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…