Airbnb客户分群——Kmeans简单运用

问题描述
根据airbnb用户信息对客户进行分群
数据字段

image.png

一、数据准备

1.引入数据

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
airbnb=pd.read_csv(airbnb_kmeans.csv)
airbnb.describe()
airbnb.info()

1.1发现age的异常值有“2岁”和“2014岁”

age.png

1.2data_account和data_first为object型 且gender为字符型变量
image.png

2.异常值处理

2.1处理年龄

#筛选出年龄大于5岁且小于100岁的用户
airbnb = airbnb[airbnb['age']>5]
airbnb = airbnb[airbnb['age']<100]

2.2处理时间变量

#将object转化为datetime变量
airbnb['date_account_created']=pd.to_datetime(airbnb['date_account_created'])
airbnb['date_first_booking']=pd.to_datetime(airbnb['date_first_booking'])

#创建新变量:“用户注册了多少年”
airbnb['year_date_account_created']=airbnb['date_account_created'].map(lambda x:2020-x.year)
#创建新变量:“距离用户第一次订单多少年”
airbnb['year_date_first_booking']=airbnb['date_first_booking'].map(lambda x:2020-x.year)

2.3处理gender字符型

airbnb['gender']=pd.get_dummies(airbnb['gender'])

二、建模

1.利用肘方法看分多少类

import sklearn.cluster
import matplotlib.pyplot as plt 
%matplotlib inline

kmeans_score = [] #存放模型拟合后的inertia
for i in range(1,11):
    model = KMeans(n_clusters=i,random_state=10)
    model.fit(airbnb_5)
    kmeans_score.append(model.inertia_) #inertia表示各点到中心之和
plt.plot(range(1,11),kmeans_score)
plt.xlabel('clusters')
plt.ylabel('interia')
plt.show()#用肘方法查看最合适的类数

可见n=3时,出现拐点,所以分类数定为3

image.png

2.分3类


model = KMeans(n_clusters=3,random_state=10)#注意KMeans两个大写字母
model.fit(airbnb_5)
result = model.predict(airbnb_5)
airbnb['K-means'] = result #创建“类别”列

3.查看分类后各中心点位置 并且解读

#查看分类后的各中心
model.cluster_centers_

分类中心.png

解读:
1.第一类为安卓使用者偏度,喜好通过PC端下单
2.第二类为通过手机移动网页下单
3.第三类为“果粉”,特征为很少使用PC端网页下单
image.png

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容