数据分析新工具MindsDB–用SQL预测用户流失

数据分析新工具MindsDB–用SQL预测用户流失

对于那些不想过度依赖通过高昂成本获取新客户的公司而言,留住现有客户非常重要。市场营销、销售及客户保留部门需要确保客户满意度,鼓励客户消费,适时为客户提供优惠,减少客户流失。 

MindsDB 可以通过分析大量客户的数据及必要交互,识别并评估客户流失风险,以减少客户流失。 MindsDB 机器学习可以帮助市场营销、销售和客户保留团队确定最佳鼓励措施,及最佳提供报价时机,帮助公司最大限度地减少客户流失率。

在本教程中,你将学习如何使用 SQL 查询训练机器学习模型,并通过三个简单的步骤进行预测:

  • 1. 将包含客户数据的数据库连接至 MindsDB(用于预测AI层的数据库)
  • 2. 使用 INSERT 语句自动训练机器学习模型。
  • 3. 使用 MindsDB“AI 表”中的简单 SELECT 语句查询预测(此特殊表在被查询时从 ML 模型返回数据)

在数据层通过 SQL执行机器学习,可以在许多方面为你提供帮助,例如删除不必要的 ETL 处理、与数据无缝集成、以及在 BI 工具中进行预测分析。接下来,我们将通过实例,向你展示如何预测电信公司新客户流失概率。如果你想了解更多数据分析相关内容,可以阅读以下这些文章:
用SQL分析——用户参与度和活动直方图的分析
Pandas和SQL,数据科学家应该用哪个?
这六个SQL小技巧,让你的分析效率突飞猛进!
Facebook和Microsoft数据科学家面试,他们会问这些SQL问题

请注意,在操作过程中,你可以通过连接到自己的数据库,使用不同的数据——此工作流程适用于大多数机器学习用例。

// 必备条件

在本教程中,我们将使用minddb Cloud。第一步,在 cloud.mindsdb.com 上创建一个免费帐户。成功登录后,你将被重定向到 MindsDB Studio。

MindsDB 入门页面上提供了详细的安装说明。

// 数据库连接(Database Connection)

首先,我们需要将 MindsDB 连接到存储客户流失数据的数据库。在左侧导航中,单击数据库(Database)。接下来,单击ADD DATABASE。在这里,我们需要提供连接数据库所需的所有参数。

  • Supported Database — 选择要连接的数据库
  • Integrations Name — 添加集成名称
  • Database — 数据库名称
  • Host — 数据库主机名
  • Port — 数据库端口
  • Username ——数据库用户
  • Password ——用户密码

然后,单击连接(CONNECT)

创建数据源(Create Datasource)

现在,我们已成功将 MindsDB 连接至数据库。现在,我们需要创建一个数据源,它要求我们将 MindsDB 连接到 Customer Churn 表。单击NEW DATASET并添加:

  • Datasource Name— 你正在创建的新源名称
  • Database— 要连接的数据库名称
  • Query — SELECT 语句从数据库中选择数据,例如 SELECT * FROM table_name;

填写完毕后,单击 CREATE。现在,我们已经成功创建了一个连接至数据库的新数据源。下一步,使用 MySQL 客户端连接到 MindsDB 的 MySQL API ,训练一个新模型,帮助我们预测客户流失。

连接至 MindsDB 的 MySQL API

mysql -h cloud-mysql.mindsdb.com --port 3306 -u theusername@mail.com -p

接下来,我将使用 MySQL 命令行客户端,但你可以用最适合你的客户端,例如 MySQL Workbench、Dbeaver 等。首先,将 MindsDB Cloud 用户连接至 MySQL API:

在上面的命令中,我们明确指明了主机名和用户名,以及用于连接的密码。

如果你的屏幕显示如上,那么你已成功连接。如果你遇到身份验证错误,请确保你提供的是用于在 MindsDB Cloud 上创建帐户的电子邮件。

// 数据概览(Data Overview)

在本教程中,我们将使用客户流失数据集。每行代表一个客户,我们将训练一个机器学习模型,帮助我们预测客户是否会停止使用公司产品。下面是对数据中每个特征的简短描述。

  • CustomerId —客户 ID
  • Gender — 男性或女性客户
  • SeniorCitizen — 客户是否为老年人 (1, 0)
  • Partner — 客户是否有合作伙伴(Yes, No)
  • Dependents — 客户是否有家属(Yes, No)
  • Tenure — 客户在公司停留的月数
  • PhoneService — 客户是否有电话服务(是,否)
  • MultipleLines — 客户是否有多条线路(是、否、无电话服务)
  • InternetServic — 客户的互联网服务提供商(DSL、光纤、否)
  • OnlineSecurity — 客户网络是否有安全(是、否、无互联网服务)
  • OnlineBackup — 客户是否有在线备份(是、否、无互联网服务)
  • DeviceProtection — 客户是否有设备保护(是、否、无互联网服务)
  • TechSupport — 客户是否有技术支持(是、否、无互联网服务)
  • StreamingTv— 客户是否有流媒体电视(是、否、无互联网服务)
  • StreamingMovies — 客户是否有流媒体电影(是、否、无互联网服务)
  • Contract——客户的合同期限(按月、一年、两年)
  • PaperlessBilling — 客户是否有无纸化账单(是,否)
  • PaymentMethod — 客户的付款方式(电子支票、邮寄支票、银行转账(自动)、信用卡(自动))
  • MonthlyCharges — 每月收费金额
  • TotalCharges — 向客户收取的总金额
  • Churn – 客户是否流失(是或否)。这是我们想要预测的最终结果。

// 使用 SQL 语句训练/查询模型

现在,我们将通过使用 MindsDB Studio 创建的数据源训练一个新的机器学习模型。

切换回 mysql-client 并运行:

use mindsdb;
show tables;

你会看到 MindsDB 数据库中有 2 个可用的表。为了训练新的机器学习模型,我们需要在预测变量表中插入一条新记录,如下所示:

INSERT INTO mindsdb.predictors(name, predict, external_datasource, training_options) VALUES('model_name', 'target_variable', 'datasource_name', {“ignore_columns”: []});

需要提供的值有:

  • name (string) – 模型的名称
  • predict (string) – 你想要预测的特征
  • external_datasource (string) — 我们用 MindsDB Studio 创建的数据源名称
  • training_options (JSON 作为逗号分隔的字符串) — 包含额外训练参数的可选值。完整的参数列表可在 PredictorInterface 文档中查找。

训练预测客户流失的模型:

INSERT INTO mindsdb.predictors(name, predict, external_datasource, training_options ) VALUES('churn_model', 'Churn', 'CustomerChurnData', '{"ignore_columns": ["gender"]}');

这一步,我们是在创建一个名为 customer_churn 的模型,从而预测客户流失,同时忽略作为模型无关列的性别列。另还需要注意一点,在本例中, MindsDB 自动检测将自动检查ID 列 customerId 并忽略。这样,我们就正式开始了模型训练。如果想要检查训练是否完成,你可以从预测变量表中选择模型名称:

SELECT * FROM predictors WHERE name='churn_model';

下一步,查询模型并预测客户流失。让我们可以想象出一个客户,该客户将只使用 DSL 服务,不使用电话服务和多条线路,她使用我们服务 1 个月了,并且有一个伴侣。将所有这些信息添加到 WHERE 子句中。图片

MindsDB预测该客户流失的可能性有80%。这里,我们需要检查一件重要的事情—— important_missing_information 值,其中 MindsDB 指向重要的缺失信息,从而提供更准确的预测,在本例中为 Contract、MonthlyCharges、TotalCharges 和 OnlineBackup。我们将这些值添加至 WHERE 子句中,并运行新的查询:

SELECT Churn, Churn_confidence, Churn_explain as Info FROM customer_churn WHERE when_data='{"SeniorCitizen": 0, "Partner": "Yes", "Dependents": "No", "tenure": 1, "PhoneService": "No", "MultipleLines": "No phone service", "InternetService": "DSL"}';

现在,我们可以看到,该客户仍然会流失,但 MindsDB 作出此预测结果的可能性为 98%。

// 结论

在本教程中,我们看到了将机器学习直接引入数据库层并使用 SQL 查询训练/查询机器学习模型,是非常简单的,并演示了如何用 SQL 查询构建机器学习模型,而且仅需三步即可预测。

如果你时间有限,你可以尝试使用 MindsDB 连接数据源、训练模型并在云端运行预测。试试看你能做出哪些预测。感谢你的阅读!你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Zoran Pandovski, MindsDB
翻译作者:Lia
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://medium.com/mindsdb/predict-customer-churn-using-sql-3d7a840a8ec7