TY / LX / NT 三系方案选型对比:2026 年采购决策参考
2026/8/1 19:42:15
在企业运营中,**客户细分(Customer Segmentation)**是精准营销、资源优化的核心环节。比如:
但传统客户细分方法(如Excel透视表、本地机器学习库)面临两个致命问题:
scikit-learn)无法并行处理,处理大规模数据时速度极慢。Apache Spark作为分布式计算框架,天生适合处理大规模数据的聚类分析,其优势包括:
K-means、Bisecting K-means、Gaussian Mixture Model(GMM)等常用聚类算法的分布式实现,性能远超本地库;假设我们有一个电商平台的客户数据集(包含100万条记录),通过Spark聚类分析后,我们可以得到这样的结果:
要运行Spark聚类分析,你需要:
pip install pyspark;pandas(数据处理)、numpy(数值计算)、matplotlib(可视化)、seaborn(高级可视化)。在开始之前,你需要了解以下概念:
K-means(基于距离)、层次聚类(基于树结构)、DBSCAN(基于密度);DataFrameAPI(推荐使用,比RDD更高效)。客户细分的第一步是获取高质量的数据。本文以电商客户数据集为例(数据来源:Kaggle的Customer Segmentation数据集),包含以下字段:
CustomerID:客户ID(唯一标识);Gender:性别;Age:年龄;Annual Income (k$):年收入(单位:千美元);Spending Score (1-100):消费评分(1-100,越高越活跃);Purchase Frequency:月消费频率;Average Order Value:平均客单价。用PySpark读取CSV文件(支持本地文件或HDFS路径):
frompyspark.sqlimportSparkSessionfrompyspark.sql.functionsimportcol# 初始化SparkSessionspark=SparkSession.builder \.appName("CustomerSegmentation")\.master("local[*]")# 本地模式,使用所有CPU核心.getOrCreate()# 读取CSV数据(包含表头)df=spark.read.csv("customer_data.csv",header=True,inferSchema=True)# 查看数据结构df.printSchema()# 输出:# root# |-- CustomerID: integer (nullable = true)# |-- Gender: string (nullable = true)# |-- Age: integer (nullable = true)# |-- Annual Income (k$): integer (nullable = true)# |-- Spending Score (1-100): integer (nullable = true)# |-- Purchase Frequency: integer (nullable = true)# |-- Average Order Value: double (nullable = true)数据清洗是聚类分析的关键步骤,主要处理以下问题:
代码示例:
# 处理缺失值:用均值填充数值型字段frompyspark.sql.functionsimportmean# 选择数值型字段numeric_cols=[colforcol,dtypeindf.dtypesifdtypein["int","double"]]# 计算均值mean_values=df.select([mean(col).alias(col)forcolinnumeric_cols]).collect()[0]# 填充缺失值df_clean=df.fillna(mean_values.asDict())# 删除重复值df_clean=df_clean.dropDuplicates()# 处理异常值:用箱线图识别,替换为上下限frompyspark.sql.functionsimportwhen,coldefhandle_outliers(df,col_name):# 计算四分位数quantiles=df.approxQuantile(col_name,[0.25,0.75],0.01)q1,q3=quantiles[