精华内容
下载资源
问答
  • 组织构建一个可行的、可靠的、敏捷的机器学习模型来简化操作和支持其业务计划需要耐心、准备以及毅力。 各种组织都在为各行业中的众多应用实施人工智能项目。这些应用包括预测分析、模式识别系统、自主系统、会话...

    组织构建一个可行的、可靠的、敏捷的机器学习模型来简化操作和支持其业务计划需要耐心、准备以及毅力。

    各种组织都在为各行业中的众多应用实施人工智能项目。这些应用包括预测分析、模式识别系统、自主系统、会话系统、超个性化活动和目标驱动系统。每一个项目都有一个共同点:它们都基于对业务问题的理解,并且数据和机器学习算法必须应用于解决问题,从而构建一个能够满足项目需求的机器学习模型。

    部署和管理机器学习项目通常遵循相同的模式。然而,现有的应用程序开发方法并不适用,因为人工智能项目是由数据驱动的,而不是编程代码。学习来源于数据,因此正确的机器学习方法源于以数据为中心的需求,并产生专注于数据发现、清理、培训、模型构建和迭代阶段的项目。

    对于许多组织来说,机器学习模型开发是一项新活动,但是在某种程度上已经建立了以数据为中心的项目构建方法。

    大约25年前,一个由五家供应商组成的联盟开发了跨行业的数据挖掘标准流程(CRISP-DM),该流程专注于数据挖掘项目中各种数据密集型步骤的连续迭代方法。该方法从业务理解和数据理解之间的迭代循环开始。接下来是数据准备和数据建模之间的迭代循环的切换,然后是评估阶段,它将结果分解到部署和业务理解。这种循环的、迭代的循环导致了连续的数据建模、准备和评估。

    但跨行业的数据挖掘标准流程(CRISP-DM)的进一步开发似乎已经停滞在近20年前完全生产的1.0版本上,而在15年前还发布其第二个版本。IBM公司和微软公司对这种方法进行了更新和迭代,以生成它们自己的变体,这些变体为数据处理和建模之间的迭代循环添加了更多细节,并提供了在此过程中产生的工件和可交付成果的更多细节。

    此外,这种方法由于并不敏捷或不适用于人工智能和机器学习项目而受到质疑。因此需要增强诸如人工智能的认知项目管理之类的方法,以满足人工智能特定的要求,并且可以在具有现有敏捷开发团队和数据组织的组织中实施这些方法。

    这些方法论以及大型公司及其数据科学团队的学习,因此采用了一种更强大、更灵活的分步方法来进行机器学习模型开发,以满足认知项目的特定需求。

    步骤1.了解并识别业务问题(并定义成功)

    任何机器学习项目的第一阶段都是发展对业务需求的理解。在解决问题之前,组织需要知道要解决的问题。

    首先,与项目所有者合作,并确保组织了解项目的目标和要求。目的是将这些知识转换为适合机器学习项目的定义,并制定实现该项目目标的初步计划。需要回答的关键问题包括:

    • 需要认知解决方案的业务目标是什么?
    • 解决方案的哪些部分是认知的,哪些并没有认知?
    • 是否解决了所有必要的技术、业务和部署问题?
    • 项目定义的“成功”标准是什么?
    • 项目如何在迭代冲刺阶段进行?
    • 是否对透明度、可解释性或减少偏见有特殊要求?
    • 道德方面的考虑是什么?
    • 精度和混淆矩阵值可接受的参数是什么?
    • 对模型的预期输入和预期输出是什么?
    • 要解决的问题的特征是什么?这是分类、回归还是聚类问题?
    • 什么是“启发式”:解决不需要机器学习的问题的快速方法?模型需要比启发式方法好多少?
    • 如何衡量模型的收益?

    尽管在第一个步骤中有很多问题要回答,但是回答甚至尝试回答这些问题将会显著增加整个项目成功的机会。

    设定具体、可量化的目标将有助于从机器学习项目中实现可测量的投资回报率,而不是简单地将其作为一个概念证明来实现,稍后将被搁置一边。其目标应该与组织业务目标相关,而不仅仅是机器学习。虽然机器学习特定的度量(例如精度、准确性、召回率和均方误差)可以包含在指标中,但更具体的业务相关关键绩效指标(KPI)更好。

    步骤2. 理解和识别数据

    一旦对业务需求有了深刻的了解并获得了计划的批准,就可以开始建立机器学习模型了,是吗?这种想法是错误的。建立业务案例并不意味着组织拥有创建机器学习模型所需的数据。

    机器学习模型是通过对训练数据进行学习和概括而构建的,然后将获取的知识应用于从未见过的新数据中进行预测并实现其目的。数据不足将会阻止组织构建模型,而仅访问数据是不够的。有用的数据必须是干净的并且处于良好的状态。

    确定组织的数据需求,并确定数据是否适合机器学习项目。组织的重点应放在数据识别、初始收集、需求、质量识别、见解和潜在的值得进一步研究的方面。以下是一些需要考虑的关键问题:

    • 训练模型所需的数据源在哪里?
    • 机器学习项目需要多少数据?
    • 当前培训数据的数量是多少?质量如何?
    • 如何拆分测试集数据和训练集数据?
    • 对于监督学习任务,是否可以标记这些数据?
    • 可以使用预训练的模型吗?
    • 操作和培训数据位于何处?
    • 在边缘设备上或更难以到达的地方访问实时数据是否有特殊需求?

    回答这些重要问题有助于组织处理数据的数量和质量,并了解使模型正常工作所需的数据类型。

    此外,组织需要了解模型如何在实际数据上运行。例如,该模型是否可以离线使用,以批处理模式对异步输入和处理的数据进行操作,还是可以实时使用并在高性能要求下运行以提供即时结果?这些信息还将确定所需的数据类型和数据访问要求。

    组织还要确定模型是否将在迭代中训练,定期或实时部署其版本。实时训练对数据提出了许多要求,这些要求在某些设置中可能不可行。

    在人工智能项目的这一阶段,了解真实世界数据和培训数据以及测试数据和培训数据之间是否存在任何差异,以及组织将采取何种方法来验证和评估模型的性能,这一点也很重要。

    步骤3.收集并准备数据

    一旦正确地识别了数据,组织就需要对这些数据进行格式化,以便可以使用它来训练其模型。重点是构建用于建模操作的数据集所必需的以数据为中心的活动。数据准备任务包括数据收集、清理、聚合、扩充、标记、规范化和转换以及结构化、非结构化和半结构化数据的任何其他活动。

    • 数据准备、收集和清理过程中的程序包
    • 从各种来源收集数据。
    • 跨不同数据源标准化格式。
    • 替换不正确的数据。
    • 增强和扩充数据。
    • 添加更多具有预先计算数量的维度,并根据需要汇总信息。
    • 使用第三方数据增强数据。
    •  “倍增”基于图像的数据集,如果这些数据集不足以进行培训。
    • 删除无关的信息和重复数据。
    • 从培训中删除无关的数据以改善结果。
    • 减少噪音并消除歧义。
    • 考虑匿名化数据。
    • 标准化数据以使其进入格式化范围。
    • 来自大型数据集的样本数据。
    • 选择可标识最重要尺寸的特征,并在必要时使用多种技术减小尺寸。
    • 将数据分为训练、测试和验证集。

    数据准备和清理任务会花费大量时间。对机器学习开发人员和数据科学家的调查表明,数据收集和准备步骤最多可占用机器学习项目80%的时间。俗话说“垃圾进、垃圾出”。由于机器学习模型需要从数据中学习,因此花费在准备和清理上的时间是值得的。

    步骤4.确定模型的特征并训练模型

    一旦数据处于可用状态,并且组织知道要解决的问题,就到了组织希望做出的下一步:训练模型,以通过应用范围从已准备好的高质量数据中学习技术和算法。

    这一阶段需要模型技术的选择和应用,模型训练、模型超参数设置和调整、模型验证、集成模型开发和测试、算法选择以及模型优化。为此,需要执行以下操作:

    • 根据学习目标和数据要求选择正确的算法。
    • 配置和调整超参数以获得最佳性能,并确定获得最佳超参数的迭代方法。
    • 确定提供最佳结果的功能。
    • 确定是否需要模型可解释性。
    • 开发集成模型以提高性能。
    • 测试不同型号的性能。
    • 确定模型的运行和部署要求。

    然后可以评估结果模型以确定其是否满足业务和运营要求。

    步骤5.评估模型的性能并建立基准

    从人工智能的角度来看,评估包括模型度量评估、混淆矩阵计算、KPI、模型性能度量,模型质量度量以及模型是否可以满足已建立的业务目标的最终确定。在模型评估过程中,应该执行以下操作:

    • 使用验证方法和验证数据集评估模型。
    • 确定分类问题的混淆矩阵值。
    • 确定k-折叠交叉验证的方法(如果使用该方法)。
    • 进一步调整超参数以获得最佳性能。
    • 将机器学习模型与基准模型或启发式模型进行比较。

    模型评估可以视为机器学习的“质量保证”。根据指标和要求对模型性能进行充分评估,可以确定模型在现实世界中的工作方式。

    步骤6.实验并调整运行中的模型

    当组织确信机器学习模型可以在现实世界中工作时,那么是时候看看它在现实世界中的实际运行了,也称之为“可操作性”模型:

    • 部署模型以持续测量和监视其性能。
    • 制定基准,以可用来衡量模型的未来迭代。
    • 不断迭代模型的不同方面,以提高整体性能。

    模型的操作化可能包括在云计算环境中,边缘、内部部署或封闭环境中或封闭的受控组中的部署方案。在运营方面的考虑因素包括模型版本控制和迭代、模型部署、模型监视以及开发和生产环境中的模型分段。根据需求,模型的操作范围可以从简单地生成报告到更复杂的多端点部署。

    步骤7.实验和调整模型

    即使模型是可运行的,并且组织一直在监视其性能,也还没有结束。在实施技术时,通常会说成功的秘诀是从小处开始,大处思考,并经常进行迭代。

    始终重复该过程并及时进行改进以进行下一次迭代。业务需求不断发生变化,而技术能力也在不断变化。实际数据以意想不到的方式变化。所有这些都可能对将模型部署到不同端点或新系统中提出新要求。而结束可能只是一个新的开始,因此最好确定以下内容:

    • 对模型功能的下一个要求;
    • 扩大模型培训以涵盖更大的能力;
    • 改善模型的性能和准确性;
    • 改进模型的运行性能;
    • 不同部署的操作要求;
    • 针对“模型漂移”或“数据漂移”的解决方案,这些解决方案可能会由于实际数据的变化而导致性能变化。

    组织需要反思在其模型中哪些有效,哪些是正在进行的工作。要在机器学习模型构建中取得成功,最可靠的方法就是不断地寻找改进和更好的方法来满足组织不断发展的业务需求。

    展开全文
  • 机器学习构建因子模型With the surge in e-commerce and digital transactions, identity fraud is has also risen to affect millions of people every year. In 2019, fraud losses in the US alone were ...

    机器学习构建因子模型

    With the surge in e-commerce and digital transactions, identity fraud is has also risen to affect millions of people every year. In 2019, fraud losses in the US alone were estimated to be at around US$16.9 billion, a substantial portion of which includes losses from credit card fraud¹.

    随着电子商务和数字交易的激增,身份欺诈每年也增加到影响数以百万计的人。 2019年,仅在美国,欺诈损失估计约为169亿美元,其中很大一部分包括信用卡欺诈造成的损失¹。

    In addition to strengthening cybersecurity measures, financial institutions are increasingly turning to machine learning to identify and reject fraudulent transactions when they happen, so as to limit losses.

    除了加强网络安全措施外,金融机构越来越多地转向机器学习来识别和拒绝欺诈交易,以限制损失。

    I came across a credit card fraud dataset on Kaggle and built a classification model to predict fraudulent transactions. In this article, I will walk through the 5 steps to building a supervised machine learning model. Below is a an outline of the five steps:

    我在Kaggle上遇到了信用卡欺诈数据集,并建立了一个分类模型来预测欺诈交易。 在本文中,我将逐步完成构建监督型机器学习模型的5个步骤。 以下是五个步骤的概述:

    1. Exploratory Data Analysis

      探索性数据分析
    2. Train-test split

      火车测试拆分
    3. Modeling

      造型
    4. Hyperparameter Tuning

      超参数调整
    5. Evaluating Final Model Performance

      评估最终模型性能

    I.探索性数据分析(EDA)(I. Exploratory Data Analysis (EDA))

    When starting a new modeling project, it is important to start with EDA in order to understand the dataset. In this case, the credit card fraud dataset from Kaggle contains 284,807 rows with 31 columns. This particular dataset contains no nulls, but note that this may not be the case when dealing with datasets in reality.

    在开始新的建模项目时,从EDA开始以理解数据集很重要。 在这种情况下,来自Kaggle的信用卡欺诈数据集包含284,807行和31列。 这个特定的数据集不包含任何空值,但请注意,实际上处理数据集时可能不是这种情况。

    Our target variable is named class, and it is a binary output of 0’s and 1’s, with 1’s representing fraudulent transactions and 0’s as non-fraudulent ones. The remaining 30 columns are features that we will use to train our model, the vast majority of which have been transformed using PCA and thus anonymized, while only two (time and amount) are labeled.

    我们的目标变量名为class ,它是0和1的二进制输出,其中1代表欺诈性交易,0代表非欺诈性交易。 剩下的30列是我们将用来训练模型的功能,其中大部分已使用PCA进行了转换并因此被匿名化,而只有两个( timeamount )被标记。

    Ia目标变量 (I.a. Target Variable)

    Our dataset is highly imbalanced, as the majority of rows (99.8%) in the dataset are non-fraudulent transactions and have a class = 0. Fraudulent transactions only represent ~0.2% of the dataset.

    我们的数据集高度不平衡,因为数据集中的大多数行(99.8%)是非欺诈性事务,并且class = 0 。 欺诈性交易仅占数据集的〜0.2%。

    This class imbalance problem is common with fraud detection, as fraud (hopefully) is a rare event. Because of this class imbalance issue, our model may not have enough fraudulent examples to learn from and we will mitigate this by experimenting with sampling methods in the modeling stage.

    这种类别的不平衡问题在欺诈检测中很常见,因为欺诈(希望如此)是罕见的事件。 由于类不平衡问题,我们的模型可能没有足够的欺诈性示例可供学习,我们将通过在建模阶段尝试使用采样方法来减轻这种情况。

    IB功能 (I.b. Features)

    To get a preliminary look at our features, I find seaborn’s pairplot function to be very useful, especially because we can plot out the distributions by the target variable if we introduce thehue='class' argument. Below is a plot showing the first 10 features in our dataset by label, with orange representing 0 or non-fraudulent transactions and blue representing 1 or fraudulent transactions.

    为了初步了解我们的功能,我发现seaborn的pairplot函数非常有用,特别是因为如果引入了hue='class'参数,我们可以通过目标变量来绘制分布。 下面的图表按标签显示了数据集中的前10个特征,橙色表示0或非欺诈性交易,蓝色表示1或欺诈性交易。

    Image for post
    Pairplots of first ten features in dataset by target variable value.
    通过目标变量值对数据集中的前十个特征进行配对。

    As you can see from the pairplot, the distributions of some features differ by label, giving an indication that these features may be useful for the model.

    从对图中可以看出,某些特征的分布因标签而异,这表明这些特征可能对模型有用。

    二。 火车测试拆分 (II. Train-Test Split)

    Since the dataset has already been cleaned, we can move on to split our dataset into the train and test sets. This is an important step as you cannot effectively evaluate the performance of your model on data that it has trained on!

    由于数据集已经清理完毕,我们可以继续将数据集拆分为训练集和测试集。 这是重要的一步,因为您无法有效地根据模型训练过的数据评估模型的性能!

    I used scikit-learn’s train_test_split function to split 75% of our dataset as the train set and the remaining 25% as the test set. It is important to note that I set the stratify argument to be equal to the label or y in the train_test_split function to make sure there are proportional examples of our label in both the train and test sets. Otherwise, if there were no examples where the label is 1 in our train set, the model would not learn what fraudulent transactions are like. Likewise, if there were no examples where the label is 1 in our test set, we would not know how well the model would perform when it encounters fraud.

    我使用scikit-learn的train_test_split函数将数据集的75%拆分为训练集,其余25%作为测试集。 需要注意的是我设置的是很重要的stratify参数等于标签或ytrain_test_split功能,以确保有在列车组和测试组我们两个标签的比例例子。 否则,如果在我们的训练集中没有标签为1的示例,则该模型将不会获悉欺诈交易是什么样的。 同样,如果在我们的测试集中没有标签为1的示例,我们将不知道该模型在遇到欺诈时的表现如何。

    X_train, X_test, y_train, y_test = train_test_split(X, y, shuffle=True, stratify=y)

    三, 造型 (III. Modeling)

    Since our dataset is anonymized, there is no feature engineering to be done, so the next step is modeling.

    由于我们的数据集是匿名的,因此无需进行要素工程,因此下一步就是建模。

    III.a. 选择ML模型 (III.a. Choosing an ML Model)

    There are different classification models to choose from, and I experimented with building simple models to pick the best one that we will later tune the hyperparameters of to optimize. In this case, I trained a logistic regression model, random forest model and XGBoost model to compare their performances.

    有不同的分类模型可供选择,我尝试构建简单的模型以选择最佳模型,然后我们将对其进行优化以优化它们。 在这种情况下,我训练了逻辑回归模型,随机森林模型和XGBoost模型来比较它们的性能。

    Due to class imbalance, accuracy is not a meaningful metric in this case. Instead I used AUC as the evaluation metric, which takes on values between 0 and 1. The AUC measures the probability that the model will rank a random positive example (class = 1) higher than a random negative example.

    由于类别不平衡,在这种情况下,准确性不是有意义的指标。 取而代之的是,我使用AUC作为评估指标,该指标采用介于0和1之间的值。AUC衡量模型将随机正例( class = 1 )排列为高于随机负例的概率。

    To evaluate model performances, I used stratified K-Fold Cross Validation to stratify sampling by class label, since our dataset is highly imbalanced. Using the model AUC scores, I made a boxplot to compare the ranges of AUC scores by model.

    为了评估模型的性能,我使用分层的K折交叉验证来按类标签对抽样进行分层,因为我们的数据集高度不平衡。 使用模型AUC分数,我制作了一个箱形图以比较模型对AUC分数的范围。

    Image for post
    Boxplots of AUC scores of different Classification Models
    不同分类模型的AUC分数的箱线图

    Not surprisingly, XGBoost appears to be the best model of our three choices. The mean AUC score of the XGBoost model is 0.970, compared to 0.944 for that of the random forest model and 0.911 for that of the logistic regression model. So, I selected XGboost as my model of choice going forward.

    毫不奇怪,XGBoost似乎是我们三个选择中最好的模型。 XGBoost模型的平均AUC得分为0.970,而随机森林模型的平均AUC得分为0.944,逻辑回归模型的平均AUC得分为0.911。 因此,我选择了XGboost作为今后的选择模型。

    III.b. 比较采样方法 (III.b. Compare Sampling Methods)

    As mentioned previously, I also experimented with different sampling techniques to deal with the class imbalance issue. I tried outimblearn's random oversampling, random undersampling and SMOTE functions:

    如前所述,我还尝试了不同的采样技术来处理类不平衡问题。 我尝试了imblearn的随机过采样,随机欠采样和SMOTE函数:

    • Random oversampling samples the minority class with replacement until a defined threshold, which I left at the default of 0.5, so our new dataset has a 50/50 split between labels of 0’s and 1’s.

      随机过采样通过替换对少数类进行采样,直到定义的阈值为止(我将其保留为默认值0.5),因此我们的新数据集在0和1的标签之间划分为50/50。

    • Random undersampling samples the majority class, without replacement by default but you can set it to sample with replacement, until our dataset has a 50/50 split between labels of 0’s and 1’s.

      随机欠采样对大多数类别进行采样,默认情况下不进行替换,但您可以将其设置为替换采样,直到我们的数据集在0和1的标签之间划分为50/50。

    • SMOTE (Synthetic Minority Oversampling Technique) is a data augmentation method that randomly selects an example from the minority class, finds k of its nearest neighbours (usually k=5), chooses a random neighbour and creates a synthetic new example in the feature space between this random neighbour and the original example.

      SMOTE(合成少数类过采样技术)是一种数据增强方法,其随机地选择从少数类的例子,发现其最近邻的K(通常K = 5),随机选择一个邻居和在之间的特征的空间中形成一个合成的新的例子这个随机的邻居和原始的例子。

    I used the Pipeline function fromimblearn.pipeline to avoid leakage, then used stratified K-Fold Cross Validation to compare performances of XGBoost models with the three different sampling techniques listed above.

    我使用了来自imblearn.pipeline的Pipeline函数来避免泄漏,然后使用分层的K折交叉验证来比较XGBoost模型与上面列出的三种不同采样技术的性能。

    Image for post
    Comparing AUC scores of XGBoost Models using Different Sampling Methods
    使用不同采样方法比较XGBoost模型的AUC分数

    The mean AUC scores of the three sampling methods are quite close at between 0.974 to 0.976. In the end, I chose SMOTE because of the smaller range in AUC scores.

    三种采样方法的平均AUC得分非常接近,介于0.974至0.976之间。 最后,由于AUC得分范围较小,我选择了SMOTE。

    IV。 超参数调整 (IV. Hyperparameter Tuning)

    I chose to use Bayesian hyperparameter tuning with a package called hyperopt, because it is faster and more informed than other methods such as grid search or randomized search. The hyperparameters that I wanted to tune for my XGBoost model were:

    我选择将贝叶斯超参数调整与称为hyperopt的软件包hyperopt ,因为它比诸如网格搜索或随机搜索之类的其他方法更快,更明智。 我想为XGBoost模型调整的超参数是:

    • max_depth: maximum depth of a tree; values between 4 to 10.

      max_depth :一棵树的最大深度; 值介于4到10之间。

    • min_child_weight: minimum sum of weights of samples to form a leaf node or the end of a branch; values between 1 to 20.

      min_child_weight :形成叶子节点或分支末端的样本的最小权重总和; 值介于1到20之间。

    • subsample: random sample of observations for each tree; values between 0.5 to 0.9.

      subsample :每棵树的观测值的随机样本; 值介于0.5到0.9之间。

    • colsample_bytree: random sample of columns or features for each tree; values between 0.5 to 0.9.

      colsample_bytree :每棵树的列或特征的随机样本; 值介于0.5到0.9之间。

    • gamma: minimum loss reduction needed to split a node and used to prevent overfitting; values between 0 and 5.

      gamma :分割节点所需的最小损耗减少,用于防止过度拟合; 值介于0到5之间。

    • eta: learning_rate; values between 0.01 and 0.3.

      eta :learning_rate; 值介于0.01和0.3之间。

    To use hyperopt, I first set up my search space with hyperparameters and their respective bounds to search through:

    要使用hyperopt,我首先使用超参数及其各自的边界设置搜索空间以进行搜索:

    space = {
    'max_depth': hp.quniform('max_depth', 4, 10, 2),
    'min_child_weight': hp.quniform('min_child_weight', 5, 30, 2),
    'gamma': hp.quniform('gamma', 0, 10, 2),
    'subsample': hp.uniform('subsample', 0.5, 0.9),
    'colsample_bytree': hp.uniform('colsample_bytree', 0.5, 0.9),
    'eta': hp.uniform('eta', 0.01, 0.3),
    'objective': 'binary:logistic',
    'eval_metric': 'auc'
    }

    Next, I defined an objective function to minimize that will receive values from the previously defined search space:

    接下来,我定义了一个目标函数以最小化将从先前定义的搜索空间接收值的函数:

    def objective(params):
    params = {'max_depth': int(params['max_depth']),
    'min_child_weight': int(params['min_child_weight']),
    'gamma': params['gamma'],
    'subsample': params['subsample'],
    'colsample_bytree': params['colsample_bytree'],
    'eta': params['eta'],
    'objective': params['objective'],
    'eval_metric': params['eval_metric']}

    xgb_clf = XGBClassifier(num_boost_rounds=num_boost_rounds, early_stopping_rounds=early_stopping_rounds, **params)

    best_score = cross_val_score(xgb_clf, X_train, y_train, scoring='roc_auc', cv=5, n_jobs=3).mean()

    loss = 1 - best_score

    return loss

    The best hyperparameters returned are listed below and we will use this to train our final model!

    下面列出了返回的最佳超参数,我们将用它来训练我们的最终模型!

    best_params = {'colsample_bytree': 0.7,
    'eta': 0.2,
    'gamma': 1.5,
    'max_depth': 10,
    'min_child_weight': 6,
    'subsample': 0.9}

    V.最终模型性能评估 (V. Evaluation of Final Model Performance)

    To train the final model, I used imblearn's pipeline to avoid leakage. In the pipeline, I first used SMOTE to augment the dataset and include more positive classes for the model to learn from, then trained a XGBoost model with the best hyperparameters found in step IV.

    为了训练最终模型,我使用了imblearn的管道来避免泄漏。 在管道中,我首先使用SMOTE扩充了数据集,并为模型学习了更多肯定的类,然后使用步骤IV中发现的最佳超参数训练了XGBoost模型。

    final_model = imblearn.pipeline.Pipeline([
    ('smote',SMOTE(random_state=1)),
    ('xgb', XGBClassifier(num_boost_rounds=1000,
    early_stopping_rounds=10,
    **best_params))])

    Va指标 (V.a. Metrics)

    Below are some metrics to evaluate the performance of the final model:

    以下是一些评估最终模型性能的指标:

    AUC

    AUC

    The AUC score of the final model is 0.991! This indicates that our final model is able to rank order fraud risk quite well.

    最终模型的AUC分数为0.991! 这表明我们的最终模型能够很好地对订单欺诈风险进行排名。

    Classification Report

    分类报告

    Image for post
    Classification Report of Test Set
    测试仪分类报告

    Precision

    精确

    True Positives/(True Positives + False Positives)

    True Positives/(True Positives + False Positives)

    Precision for class 0 is 1, indicating that all items labeled as belonging to class 0 are indeed non-fraudulent transactions. Precision for class 1 is 0.86, meaning that 86% of items labeled as class 1 are indeed fraudulent transactions. In other words, the final model correctly predicted 100% of non-fraudulent transactions and 86% of fraudulent transactions.

    0类的精度为1,表示所有标记为属于0类的项目的确是非欺诈性交易。 1类的精度为0.86,这意味着标记为1类的项目中确实有86%是欺诈交易。 换句话说,最终模型正确地预测了100%的非欺诈性交易和86%的欺诈性交易。

    Recall

    召回

    True Positives/(True Positives + False Negatives)

    True Positives/(True Positives + False Negatives)

    Recall for class 0 is 1, meaning that all non-fraudulent transactions were labeled as such, i.e. belonging to class 0. Recall for class 1 is 0.9, so 90% of fraudulent transactions were labeled as belonging to class 1 by our final model. This means that the final model is able to catch 90% of all fraudulent transactions.

    召回类别0为1,这意味着所有非欺诈性交易都被标记为此类,即属于类别0。召回类别1为0.9,因此最终模型将90%的欺诈性交易标记为属于类别1。 这意味着最终模型能够捕获所有欺诈性交易的90%。

    F1 score

    F1分数

    2 * (Recall * Precision)/(Recall + Precision)

    2 * (Recall * Precision)/(Recall + Precision)

    The F1 score is a weighted harmonic mean of precision and recall. The F1 score of the final model predictions on the test set for class 0 is 1, while that for class 1 is 0.88.

    F1分数是精度和召回率的加权谐波平均值。 0级测试集上最终模型预测的F1得分为1,而1级测试集的F1得分为0.88。

    Vb功能的重要性 (V.b. Feature Importances)

    To understand the model, it is useful to look at the Shap summary and feature importances plots. Unfortunately, most features have been anonymized in this dataset, but the plots show that v14, v4 and v12 are the top 3 most important features in the final model.

    要了解该模型,查看Shap摘要和要素重要性图很有用。 不幸的是,大多数特征在该数据集中都是匿名的,但是这些图显示v14,v4和v12是最终模型中最重要的3个特征。

    Image for post
    Feature Importances Plot for Final XGBoost Model
    最终XGBoost模型的功能重要性图
    Image for post
    Shap Summary Plot of Test Set for Final XGBoost Model
    最终XGBoost模型的测试集的概要摘要图

    最后的想法(Final Thoughts)

    In merely five steps, we built an XGBoost model capable of predicting whether a transaction is fraudulent or not based on the 30 features provided in this dataset.

    仅用五步,我们就建立了一个XGBoost模型,该模型能够基于此数据集中提供的30个功能来预测交易是否为欺诈行为。

    Our final model has an AUC score of 0.991, which is incredibly high! However, it is worth noting that this was done with a pre-cleaned (and manipulated) dataset. In reality, feature engineering is a vital step in modeling but we did not have the chance to do so here due to limits of working with an anonymized dataset.

    我们的最终模型的AUC得分为0.991,这是令人难以置信的高! 但是,值得注意的是,这是使用预先清理(和处理)的数据集完成的。 实际上,要素工程是建模的关键步骤,但是由于使用匿名数据集的限制,我们在这里没有机会这样做。

    I hope that this hands-on modeling exercise using a real dataset helped you better understand the mechanics behind creating a machine learning model to predict fraud. I am very curious to know what the anonymized features were, especially the most predictive ones. If you have any ideas on what they could be, please comment below!

    我希望这个使用真实数据集的动手建模练习可以帮助您更好地了解创建机器学习模型以预测欺诈的背后机制。 我很想知道匿名功能是什么,尤其是最具预测性的功能。 如果您有任何想法,请在下面评论!

    To see the code, please check out my jupyter notebook file on Github. Thank you!

    要查看代码,请在Github上查看我的jupyter笔记本文件。 谢谢!

    脚注 (Footnotes)

    [1]: Javelin Strategy. 2020 Identity Fraud Study: Genesis of the Identity Fraud Crisis. https://www.javelinstrategy.com/coverage-area/2020-identity-fraud-study-genesis-identity-fraud-crisis

    [1]:标枪策略。 2020年身份欺诈研究:身份欺诈危机的成因。 https://www.javelinstrategy.com/coverage-area/2020-identity-fraud-study-genesis-identity-fraud-crisis

    翻译自: https://towardsdatascience.com/how-to-build-a-machine-learning-model-to-identify-credit-card-fraud-in-5-stepsa-hands-on-modeling-5140b3bd19f1

    机器学习构建因子模型

    展开全文
  • 构建机器学习系统步骤

    千次阅读 2018-09-12 09:47:06
    构建机器学习系统 我们使用机器学习预测模型的工作流程讲解机器学习系统整套处理过程。 整个过程包括了数据预处理、模型学习、模型验证及模型预测。其中数据预处理包含了对数据的基本处理,包括特征抽取及缩放、...

    构建机器学习系统

    我们使用机器学习预测模型的工作流程讲解机器学习系统整套处理过程。

    这里写图片描述

    整个过程包括了数据预处理、模型学习、模型验证及模型预测。其中数据预处理包含了对数据的基本处理,包括特征抽取及缩放、特征选择、特征降维和特征抽样;我们将带有类标的原始数据划按照 82 原则分为训练数据集和测试集。使用训练数据集用于模型学习算法中学习出适合数据集的模型,再用测试数据集用于验证最终得到的模型,将模型得到的类标签和原始数据的类标签进行对比,得到分类的错误率或正确率。

    当有新数据来的时候,我们可以代入模型进行预测分类。

    :特征缩放、降维等步骤中所需的参数,只可以从训练数据中获取,并能够应用于测试数据集及新的样本,但仅仅在测试集上对模型进行性能评估或许无法监测模型是否被过度优化。

    1、数据预处理(特征工程)

    数据预处理是机器学习应用的必不可少的重要步骤之一,以提到的 Iris Dataset 为例,将花朵的图像看做原始数据,从中提取有用的特征,其中根据常识我们可以知道这些特征可以是花的颜色、饱和度、色彩、花朵整体长度以及花冠的长度和宽度等。首先了解一下几个数据预处理方法:

    • (数据归一化与标准化,缺失值处理)大部分机器学习算法为达到性能最优的目的,将属性映射到[0,1]区间,或者使其满足方差为 1、均值为 0 的标准正态分布,从而提取出的特征具有相同的度量标准。
    • (数据降维)当源数据的某些属性间可能存在较高的关联,存在一定的数据冗余。此时,我们使用机器学习算法中的降维技术将数据压缩到相对低纬度的子空间中是非常有用的。数据降维算法不仅可以能够使得所需的存储空间更小,而且还能够使得学习算法运行的更快。
    • (数据集切分) )为了保证算法不仅在训练集上有效,同时还能很好地应用于新数据,我们通常会随机地将数据集划分为训练数据集和测试数据集,使用训练数据集来训练及优化我们的机器学习模型,完成后使用测试数据集对最终模型进行评估。

    数据预处理也称作特征工程,所谓的特征工程就是为机器学习算法选择更为合适的特征。当然,数据预处理不仅仅还有上述的三种。

    2、选择预测模型进行模型训练

    任何分类算法都有其内在的局限性,如果不对分类任务预先做一些设定,没有任何一个分类模型会比其他模型更有优势。因此在实际的工作处理问题过程中,必不可少的一个环节就是选择不同的几种算法来训练模型,并比较它们的性能,从中选择最优的一个。

    • (1)如何选择最优的模型呢?我们可以借助一些指标,如分类准确率(测量值和真实值之间的接近程度)、错误率等指标衡量算法性能。
    • (2)疑问:选择训练模型的时候没有使用测试数据集,却将这些数据应用于最终的模型评估,那么判断究竟哪一个模型会在测试数据集有更好的表现?针对该问题,我们采用了交叉验证技术,如 10 折交叉验证,将训练数据集进一步分为了训练子集和测试子集,从而对模型的泛化能力进行评估。
    • (3)不同机器学习算法的默认参数对于特定类型的任务来说,一般都不是最优的,所以我们在模型训练的过程中会涉及到参数和超参数的调整。 
      什么是超参数呢?超参数是在模型训练之前已经设定的参数,一般是由人工设定的。什么是参数呢?参数一般是在模型训练过程中训练得出的参数。

    3、模型验证与使用未知数据进行预测

    使用训练数据集构建一个模型之后可以采用测试数据集对模型进行测试,预测该模型在未知数据上的表现并对模型的 泛化误差进行评估。如果对模型的评估结果表示满意,就可以使用此模型对以后新的未知数据进行预测。

    但什么是泛化误差呢?我们带着这个问题分别对模型验证这块涉及到的基础概念做一个深入理解: 
    【基础概念】通常我们把分类错误的样本数占样本总数的比例称为“错误率(error rate)”,如果在 m 个样本中有 a 个样本分类错误,则错误率为 E=a/m;从另一个角度,1-a/m则称为“分类精度(accurary)”,也就是“精度+错误率=1”。

    我们将模型(或学习器)的实际输出与样本的真实值之间的差异称为“误差(error)”,学习器在训练集上的误差称为“训练误差(training error)”或经验误差(empirical error),在新的样本上的误差称为“泛化误差(generalization error)”。

    我们在模型验证的时候 期望得到泛化误差小的学习器。

    这里写图片描述

    实际的任务中,我们事先并不知道新样本是什么样子的,实际能做的就是努力使得训练误差最小。但是真正当一个模型对训练集的分类错误率为 0,分类精度为 100%,但是这是我们真正想要的学习器吗?通常情况下,训练集上的分类精度太高,模型在测试集上的性能不会太好。所以我们 初步讨论下模型的评估及模型选择问题。

    ( 叙述 :模型评估主要从准备率、召回率等几个指标做预测模型的评估,模型选择我们主要从模型的泛化性能的两个方面展开,一个是欠拟合,一个是过拟合。)

    4、 模型评估

    构建机器学习模型的一个关键步骤就是在新数据上对模型的性能进行评估,模型评估就是评估得到的经训练数据集结合机器学习算法训练得到的预测模型是否是最优的或者对新数据有较强的泛化能力。我们通过以下几个性能指标评估预测模型:分类的混淆矩阵、分类准确率、召回率以及 F1-score,K 折交叉验证几个部分来学习模型评估。

    4.1、 混淆矩阵读取

    首先,认识混淆矩阵 confusion matrix,该矩阵是展示学习算法性能的一种矩阵。 
    (1)首先绘制混淆矩阵,该矩阵为方阵 
    (2)如下图,该矩阵用于展示分类器预测结果—-真正 TP(true positive)、真负 TN(true negative)、假正 FP(false positive)、假负 FN(false negative)。

    这里写图片描述

    4.2、准确率和召回率、1 F1 分数

    预测误差(error,ERR)和准确率(accurary,ACC)都提供了误分类样本数量的相关信息。误差可以理解为预测错误样本与所有被预测样本数量量的比值,而准确率计算方法则是正确预测样本的数量与所有被预测样本数量的比值。

    这里写图片描述

    比如在肿瘤诊断中,我们更为关注是正确检测出的恶性肿瘤,使得病人得到治疗。然而降低良性肿瘤(假负 FN)错误被划分为恶性肿瘤,但对患者影响并不大。与 FPR 相反,真正率提供了有关正确识别出来的恶性肿瘤样本(或相关样本)的有用信息。 
    由此提出了准确率(persoon,PRE)和召回率(recall,REC),是与真正率、真负率相关的性能评价指标,召回率实际上与真正率含义相同,定义如下: 
    (真正率是看矩阵的行,即实际情况)

    这里写图片描述

    准确率(模型的预测情况,看矩阵的列)定义:

    这里写图片描述

    4.3、Khold 评估模型性能

    验证模型准确率是非常重要的内容,我们可以将数据手工切分成两份,一份做训练,一份做测试,这种方法也叫“留一法”交叉验证。这种方法很有局限,因为只对数据进行一次测试,并不一定能代表模型的真实准确率。因为模型的准确率和数据的切分是有关系的,在数据量不大的情况下,影响比较大。因此我们提出了 K 折交叉验证,K-Fold 交叉验证。

    K-Fold 交叉验证,将数据随机且均匀地分成 k 分,常用的 k 为 10,数据预先分好并保持不动。假设每份数据的标号为 0-9,第一次使用标号为 0-8 的共 9 份数据来做训练,而使用标号为 9 的这一份数据来进行测试,得到一个准确率。第二次使用标记为 1-9 的共 9 份数据进行训练,而使用标号为 0 的这份数据进行测试,得到第二个准确率,以此类推,每次使用9 份数据作为训练,而使用剩下的一份数据进行测试,这样共进行 10 次,最后模型的准确率为 10 次准确率的平均值。这样就避免了数据划分而造成的评估不准确的问题。

    如下图:

    这里写图片描述

    展开全文
  • 说到模型模块的构建步骤,再来回顾一下Pytorch五大模块的流程《Pytorch:机器学习深度学习整个模型训练的总体步骤思路》 模型模块的具体框架如下: 模型创建 具体通过代码表述 ...

    模型

    说到模型模块的构建步骤,再来回顾一下Pytorch五大模块的流程《Pytorch:机器学习深度学习整个模型训练的总体步骤思路

     

    模型模块的具体框架如下:

     

    模型创建 

    具体通过代码表述

    (还未更新完,最近有点忙,见谅..)

     

    展开全文
  • 目录二、Sklearn构建完整机器学习模型来源2.1 机器学习项目通常步骤2.2 用Sklearn对机器学习项目的构建2.2.1 导入数据集及特征选择2.2.2 模型性能评价指标2.2.3 模型选择2.2.3.1 线性回归模型参考资料 来源 Datewhle...
  • 1.8 实时机器学习模型的生存期 进行实时机器学习开发必须考虑生存期。生存期是指一个系统从提出、设计、开发、 测试到部署运用、维护、更新升级或退役的整个过程。若在生存期设计上出现了数据,那么在后面的使用中...
  • 这篇文章旨在使您开始使用基本的机器学习模型。 一个聊天机器人。 现在,我们不会重新创建Alexa,Siri,Cortana或Google Assistant,但我们将从头开始创建一个全新的机器学习程序。 假设您了解一些Python编程,...
  • 使用Flask Dockerize并将机器学习模型作为REST API部署 一个可以服务于预测机器学习模型的简单Flask应用程序。 启动Flask应用程序后,将一个腌制的sklearn模型读入内存,并通过/ predict端点返回预测。 您还可以使用...
  • 概述TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型,而无需任何复杂的...介绍你喜欢用什么工具来编写机器学习模型?数据科学家们对这个永恒的问题会给出各种不同的答案。一些人喜欢...
  • 机器学习项目构建

    2018-05-28 22:09:54
    前言构建机器学习项目,包含主要的学习步骤:1、 数据清理和格式化;2、 探索性数据分析;3、 特征工程和特征选择;4、 在性能指标上比较学习模型;5、 对最佳模型执行超参数调整;6、 解释模型结果;7、 结果分析;...
  • 总的来说一般机器学习分如下步骤 获取数据——》数据预处理——》训练模型——》模型评估——》预测 鸢尾花识别是一个经典的机器学习分类问题,它的数据样本中包括了4个特征变量,1个类别变量,样本...
  • 构建机器学习模型 保存机器学习模型:序列化和反序列化 用Flask为模型创建API 在Postman中测试API 什么是API 简单来说,一个API其实就是两个软件之间的(假定)契约,如果面向终端用户的软件能以预定义的格式提供...
  • TensorFlow构造机器学习模型的常规步骤 输入训练数据 定义训练参数 构建目标模型 定义损失函数 选择优化器及定义训练操作 循环迭代式优化超参数 1.输入数据 import pandas as pd import tensorflow as ...
  • 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建机器学习模型的方法。然后,构建使用计算机的网络摄像头检测身体姿势的应用程序。概述TensorFlow.js (deeplearn.js)使我们能够在浏览器中...
  • 在本教程中,我们演示了如何从头到尾完整地创建和运行分类模型的实践示例。本教程包括以下步骤: 数据探索 数据预处理 拆分数据以用于训练和测试 准备一个分类模型 使用管道组装所有步骤 训练模型模型运行预测 ...
  • 该项目提供python类以自动构建,训练和测试tensorflow机器学习模型。 结构如下: 为您要训练的模型架构创建一个类。 例子在图表/ 此类具有init方法,该方法定义权重,偏差等。 此类还具有一个call方法,该方法将...
  • 学习模型大小 迭代次数 打乱数据(Shuffling) 正则化 评估模型的准确率 二元分类(Binary Classification) 多类分类(Multiclass Classification) 回归(Regression) 提高模型的精度 模型拟...
  • 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建机器学习模型的方法。然后,构建使用计算机的网络摄像头检测身体姿势的应用程序。概述TensorFlow.js (deeplearn.js)使我们能够在浏览器中...
  • TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型,而无需任何复杂的安装步骤。 TensorFlow.js的两个组件——Core API和Layer API。 了解如何构建一个很棒的使用Tensorflow....
  • 点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”作者:Rahul Agarwal编译:ronghuaiyang创造一个大的机器学习系统是一门艺术。在构建一个大的...
  • 机器学习项目的步骤

    2020-02-13 20:43:26
    机器学习项目 步骤 python中与机器学习相关的 Libraries and Tools 一、Import the Data 引入数据 这些数据是通常以.csv结尾的文件,要构建一个拥有大量数据的数据库 二、Clean the Data 包括去除一些重复数据...
  • 大数据文摘授权转载自数据派THU作者:MOHD SANAD ZAKI RIZVI本文主要介绍了:TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型,而无需任何复杂的安装步骤。TensorFlow.js的两个组件...
  • 大数据文摘授权转载自数据派THU作者:Jakub Czakon, Neptune.ai翻译:陈之炎在编写完成一个Python脚本之后,便可以用它训练和评估机器学习模型了,现在,问题来了,是否能对它自动调整超参数以提高其性能呢?...
  • 内幕交易识别模型构建-机器学习 ——————————-分割线—————————— 这是本科毕业论文项目的最后一篇,关于内幕交易识别模型构建。 在之前的步骤中,已经将文本信息处理完毕并且通过几个常用...
  • 大数据文摘授权转载自数据派THU作者:MOHD SANAD ZAKI RIZVI本文主要介绍了:TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型,而无需任何复杂的安装步骤。TensorFlow.js的两个组件...
  • 大数据文摘授权转载自数据派THU作者:MOHD SANAD ZAKI RIZVI本文主要介绍了:TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型,而无需任何复杂的安装步骤。TensorFlow.js的两个组件...
  • 文章目录细分构建机器学习应用程序的流程-模型优化1.1 网格搜索法1.2 随机搜索法1.2.1 随机采样1.2.2 随机搜索法 细分构建机器学习应用程序的流程-模型优化   通过数据收集、数据预处理、训练模型、测试模型上述四...
  • 一:使用pipeline进行数据预处理,模型构建 from sklearn.pipeline import Pipeline pipe = Pipeline([("scaler", MinMaxScaler()), ("svm", SVC())])#有两个步骤 pipe.fit(X_train, y_train) #自动对数据进行...
  • 深度学习的关注度正持续上升,它是机器学习的一个子领域,基于人工神经网络的概念来执行特定任务。然而在理论上,人工神经网络与人类大脑的运作方式并不相同,甚至都不相似! 它们之所以被命名为人工神经网络,是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 476
精华内容 190
关键字:

机器学习模型构建步骤