Análisis y resumen del caso de comercio electrónico de recomendación personalizada basado en clustering

Antes de escribir el artículo, en primer lugar agradezco a dos maestros: el maestro de salsa Ju An y el maestro de Luo. Bajo su guía, el proyecto se puede completar con éxito.
Los datos están insensibilizados, no discuta la autenticidad de los datos:
enlace de código completo .

1. Propósito

Divida los diferentes grupos de clientes en función del comportamiento de la transacción del pedido del usuario y el análisis de las características de los atributos del producto, y luego recomiende personalmente a los usuarios los productos no comprados.

Segundo, ideas de análisis.

1. A partir de los atributos de categoría de productos, explore un grupo de clientes con la misma preferencia a través de un modelo de agrupación.
2. Luego use el precio unitario de los productos básicos como un indicador cuantitativo del comportamiento de consumo, descubra los productos favoritos que pertenecen al mismo grupo de clientes y los recomiende a otros usuarios que no hayan comprado

3. Agrupación basada en datos del usuario

1. Leer datos

df_order = pd.read_csv("orders.csv")                          #读取订单数据
df_item = pd.read_csv("Items_orders.csv")                     #读取商品交易数据
df_atrr = pd.read_csv("Items_attribute.csv",encoding='gbk')   #读取商品属性数据

2. Explore los datos

2.1, primero observe la correlación entre las tres tablas

1. Vea los datos del número de pedido en el formulario de pedido y la tabla de detalles del pedido, puede analizar que el formulario de pedido es el resultado resumido de la tabla de detalles del pedido, y la fusión de las dos tablas puede explorar los datos de comportamiento del pedido del usuario

df_order.shape,np.unique(df_order.订单编号).shape  #可以看出没有重复数据
df_item.shape,np.unique(df_item.订单编号).shape  
#订单编号去重后与df_order的行数一致
#结合数据,我们可以肯定df_item是订单明细表,df_order是订单表,两个表需要合并成一张表

1. Verifique la identificación del bebé y los datos del título en la tabla de información del producto. Si queremos explorar los datos de la relación de comportamiento del producto del usuario, debemos fusionar la tabla de información del producto y la tabla de detalles del pedido.

df_atrr.shape,np.unique(df_atrr.宝贝ID).shape   #可以看出没有重复数据
#和df_item表对照看,这张表是商品信息表。
#需要和df_item表合并,把商品属性信息补充到df_item表中
#应该用宝贝ID作为连接字段,因df_item表中无宝贝ID字段;只有标题是共同字段;所以我们考虑用标题作为连接字段

np.unique(df_atrr.标题).shape,np.unique(df_item.标题).shape 
#发现df_item表中有部分标题在df_atrr中没有

2.2. Compruebe si el nombre de la columna importada necesita un procesamiento previo

El propósito de este paso es eliminar espacios en los nombres de columna para facilitar la recuperación de datos.

for df in [df_order,df_atrr,df_item]:
    df.columns=df.columns.map(lambda x:x.strip())
#把所有表列名中的空格去除

2.3. Seleccionar campos basados ​​en la evaluación del negocio

¿Cómo explorar específicamente? No lo explicaré en detalle. El enlace del código detallado ya tiene un proceso de operación detallado. Este paso es el más engorroso e importante. Analizamos capa por capa como pelar maíz, y finalmente obtenemos datos de comportamiento de los pedidos de los usuarios, datos de comportamiento de las transacciones de los usuarios y datos de comportamiento de la categoría de productos básicos del usuario. Siga los siguientes pasos:

2.3.1 En base a los datos del pedido del usuario, extraiga los datos del comportamiento del pedido del usuario.

1. Use el método mean () para contar la proporción de valores faltantes para eliminar características con valores faltantes superiores al 80%

#把其余缺失值多余80%的数据删除
isna_columns=df_order_d1.isnull().mean()>0.8
df_order_d1.drop(columns=isna_columns[isna_columns].index.tolist(),axis=1,inplace=True)

2. Usamos el método describe () para verificar si hay un valor anormal, y luego usamos la herramienta naciente para dibujar un histograma (curva de distribución de observación) y una línea de recuadro del "monto de pago real del comprador", "tipo de bebé", "número total de bebés" Análisis de gráficos esquema de procesamiento de valores atípicos. Al final, solo elegimos lidiar con los valores atípicos de las dos características de "la cantidad real pagada por el comprador" y "número total de tesoros", y solo se eliminaron un total de 10 registros. ¿Por qué no eliminar los valores atípicos de la función 'Tipo de bebé'? Debido a los datos y gráficos, la distribución de datos es relativamente uniforme y los valores atípicos no se pueden eliminar si son significativos.
Aquí solo se muestran los gráficos de las características de 'especies de bebés'.

f,(ax1,ax2)=plt.subplots(1,2,figsize=(12,6))
sns.distplot(df_order_d2.宝贝种类,ax=ax1)
sns.boxplot(y='宝贝种类',data=df_order_d2,ax=ax2)
plt.show()

Inserte la descripción de la imagen aquí

2.3.2. Datos de comportamiento de transacciones de usuarios mineros basados ​​en datos de transacciones de usuarios

Este proceso de exploración de datos es relativamente simple, las características de la lista de pedidos son pocas y la única información útil es el precio. Después de observar que no faltan valores, use pd.merge y la tabla df_order_d3 en el proceso anterior para fusionar y resumir los datos de comportamiento de la transacción del usuario.

2.3.3 Minería de datos de comportamiento de la categoría de productos básicos del usuario en función de los atributos del producto comprado por el usuario

A través de la exploración de cada característica, finalmente se descubre que solo se puede usar la característica de edad aplicable, y esta característica se puede usar para clasificar y generar nuevas características de etiqueta como la categoría del producto

#定义一个商品适用年龄的标签结构
#2岁以下不包含2岁,定义为婴儿,包含月
#2岁-4岁定义为幼儿
#5岁-7岁-定义儿童
#8岁以上定义为学生
def addTag(x):
    tag=''
    if '月' in x:
        tag+='婴儿'
    x=x.split(',')
    if '2岁' in x or '3岁' in x or '4岁' in x:
        tag+='幼儿|'
    if '5岁' in x or '6岁' in x or '7岁' in x:
        tag+='儿童|'
    if '8岁' in x or '9岁' in x or '10岁' in x or  '11岁' in x or '12岁' in x or '13岁'in x or '14岁' in x:
        tag+='学生|'
    if 'missing' in x:
        tag+='missing'
    return tag
    df_atrr['tag']=df_atrr.适用年龄.apply(addTag)
#通过适用年龄对于各玩具商品划分类别
df_atrr.head()

2.3.4. Estandarización de datos

El propósito de este paso es eliminar la influencia dimensional causada por características tales como 'la cantidad real pagada por el comprador', 'tipo de bebé', 'número total de bebé' y 'precio'.

from sklearn.preprocessing import MinMaxScaler  #导入标准处理包
#获取分析数据
data_pre=user_info5.iloc[:,1:].values
mms=MinMaxScaler()
data_norm=mms.fit_transform(data_pre)   #标准化处理消除量纲影响
pd.DataFrame(data_norm).head()

3. Modelado

1. Primero determinamos el valor óptimo de K dibujando la curva de coeficiente de contorno. Desde el punto de vista gráfico, el modelo K = 2 funciona mejor. Desde una perspectiva empresarial, la categoría k = 2 no está bien dividida; excluimos 2 y luego observamos los otros datos. El punto más alto es 8 y la puntuación también es buena. Por lo tanto, el valor óptimo de K que elegimos es 8

from sklearn.metrics import silhouette_score  #导入轮廓系数计算包

#通过轮廓系数寻找最优的k
score=[]
for k in range(2,16):
    km=KMeans(n_clusters=k)
    res_km=km.fit(data_norm)
    score.append(silhouette_score(data_norm,res_km.labels_))

plt.plot(range(2,16),score,marker='o')

Inserte la descripción de la imagen aquí2. Establezca un modelo de agrupación y agregue los resultados de ajuste del modelo a la tabla.

#把结果加入user_info5表中
user_info5['类别']=km.labels_
user_info5.head()

4. Divida los grupos de usuarios según el modelo.

El trabajo de preparación anterior es muy suficiente, este paso es muy simple, podemos extraer nuestros datos de destino con solo una oración.

cluster_result=user_info5.loc[:,['买家会员名','类别']]
cluster_result.head()

4. Recomendación personalizada basada en resultados de agrupación de usuarios

No se adjunta ningún código en la parte posterior, y el enfoque de este caso está en la exploración y limpieza de datos en el frente. A continuación, explique las siguientes ideas:
1. Combine las dos tablas df_order y df_item para encontrar la lista de información del producto que el usuario no ha comprado [user-product (notbuy)]
2. Utilice el [user-product (notbuy) obtenido en el paso 1 )] Tabla que corresponde a la tabla del grupo de usuarios (datos del grupo de usuarios divididos según el modelo de agrupación) para obtener datos [usuario-producto (no comprar) -grupo]
3. Defina las preferencias del usuario (la preferencia de los usuarios por el número de compras de productos), construya La preferencia del producto [preferencia de usuario-producto]
4. Utilice la tabla [preferencia de usuario-producto] obtenida en el paso 3 para hacer coincidir la tabla del grupo de usuarios para obtener datos [grupo de preferencias de usuario-producto]
5. El mismo grupo Los usuarios en el grupo agregan las preferencias del mismo producto para obtener la preferencia del grupo de usuarios para cada producto [grupo-producto-preferencia promedio] datos
6. El grupo [usuario-producto (no comprar) -grupo obtenido en el paso 2 】 La tabla se combina con la tabla [preferencia media de grupo de productos básicos] obtenida en el paso 5 (grupo de productos básicos) para obtener datos [preferencia media de usuario-producto (no comprar) -grupo-grupo]
7. Ordenar grupos de filas, obtener la lista de recomendaciones de TopN

Cinco, exporta el resultado final

Adjunte mi fragmento de código leal:

if not os.path.exists('save_result'):
    os.makedirs('save_result') #文件夹不存在,创建文件夹

topk.to_csv('save_result/Cluster_User_Item_Topn_data.csv',index=False,encoding='GBK')

6. Resumen

1. Los tres procesos más importantes de todo el proyecto son la exploración de datos, la limpieza de datos y el preprocesamiento de datos, que representan aproximadamente el 80% del tiempo total. En cierto punto, el pensamiento poco claro o la operación incorrecta pueden conducir fácilmente a errores en el resultado final.
2. La agrupación es un algoritmo basado en el cálculo de la distancia. Antes de ejecutar el modelo, es necesario estandarizar los datos para eliminar la influencia de la dimensión.

12 artículos originales publicados · Me gusta9 · Visitantes más de 20,000

Supongo que te gusta

Origin blog.csdn.net/sun91019718/article/details/101323930
Recomendado
Clasificación