2023 Second DingTalk Cup College Student Big Data Challenge Ronda preliminar A: Problema de análisis de datos de monitoreo de usuarios de teléfonos inteligentes Problema de clasificación binaria y regresión Análisis de código Python

2023 Second DingTalk Cup College Student Big Data Challenge Ronda preliminar A: Problema de análisis de datos de monitoreo de usuarios de teléfonos inteligentes Problema de clasificación binaria y regresión Análisis de código Python

inserte la descripción de la imagen aquí

enlaces relacionados

[2023 2nd Dingding Cup College Student Big Data Challenge Ronda preliminar] Ronda preliminar A: Problema de análisis de datos de monitoreo de usuarios de teléfonos inteligentes: análisis de código Python

[2023 2nd Dingding Cup College Student Big Data Challenge Ronda preliminar] Ronda preliminar A: análisis de código Python del problema de análisis de datos de monitoreo de usuarios de teléfonos inteligentes problema de clasificación binaria y regresión

1 tema

2023 Second DingTalk Cup College Student Big Data Challenge Tema preliminar Preliminar A: Análisis de datos de monitoreo de usuarios de teléfonos inteligentes

1. Antecedentes del problema

En los últimos años, con la aparición de los teléfonos inteligentes, su popularidad ha crecido de manera explosiva, lo que no solo promueve el desarrollo y la expansión del mercado de teléfonos inteligentes de China, sino que también promueve rápidamente el desarrollo de software para teléfonos móviles. En los últimos años, la competencia de marcas en el mercado de teléfonos inteligentes de China se ha intensificado aún más, y China ha superado a Estados Unidos para convertirse en el mercado de teléfonos inteligentes más grande del mundo. El software de los teléfonos móviles está cambiando cada día que pasa, lo que hace que las personas usen los teléfonos móviles con mayor comodidad, brindando mucha diversión a la vida de las personas y también creando un nuevo grupo de "personas que inclinan la cabeza". El software móvil ha entrado en la vida de las personas. Aplicaciones como juegos, compras, redes sociales, información y gestión financiera han atraído y facilitado a las personas en la sociedad moderna, haciendo que los teléfonos móviles sean un elemento imprescindible para salir. Los datos provienen de los datos de seguimiento de más de 40 000 usuarios de teléfonos inteligentes de una empresa durante 30 días consecutivos en un año determinado, y se han desensibilizado y transformado los datos. Los datos diarios son un archivo txt con 10 columnas en total, que registra la hora de inicio, la duración del uso y el tráfico ascendente y descendente de cada usuario (identificado por uid) todos los días usando cada aplicación (identificado por appid). Consulte la Tabla 1 para obtener más información. Además, hay una tabla auxiliar, app_class.csv, con dos columnas. La primera columna es appid, brindando más de 4,000 categorías de aplicaciones de uso común (app_class), tales como: social, cine y televisión, educación, etc., representadas por la letra en inglés, un total de 20 categorías de uso común, el resto de la aplicación no se usa comúnmente, la categoría es desconocida.

tabla 1

número variable nombre de la variable paráfrasis
1 fluido identificación de usuario
2 appido La identificación de la aplicación (correspondiente a la primera columna en el archivo app_class)
3 tipo_aplicación Tipo de aplicación: sistema incorporado, instalado por los usuarios
4 día_de_inicio El día de inicio de uso, el valor es 1-30 (Nota: el día de inicio de uso de las dos primeras filas de los datos del primer día es 0, lo que indica que se usa el día anterior a este día)
5 hora de inicio Usar hora de inicio
6 día final día de fin de uso
7 hora de finalización Usar hora de finalización
8 duración Duración de uso (segundos)
9 up_flow tráfico ascendente
10 flujo_descendente Tráfico descendente

Dos, resuelve el problema.

  1. Análisis de conglomerados

(1) Agrupe a los usuarios de acuerdo con los datos de 20 categorías de aplicaciones a las que los usuarios suelen pertenecer. Se requiere proporcionar al menos tres algoritmos de agrupación diferentes para comparar, seleccionar un valor de número K de agrupación razonable y analizar los resultados de la agrupación.

(2) Perfilar diferentes categorías de usuarios de acuerdo con los resultados de la agrupación y analizar las características de los diferentes grupos de usuarios. (Definición de retrato de usuario: etiquete a los usuarios de acuerdo con sus atributos, preferencias, hábitos de comportamiento y otra información para describir el comportamiento de los usuarios de diferentes grupos, a fin de recomendar diferentes categorías de productos de aplicaciones para usuarios de diferentes grupos).

  1. Análisis predictivo de uso de la APP: el problema a estudiar es predecir si el usuario utilizará la APP en el futuro (problema de clasificación) y la duración del uso (problema de regresión) en base a los registros de uso de la APP del usuario

(1) Predecir el uso de la APLICACIÓN por parte del usuario y predecir si el usuario utilizará este tipo de APLICACIÓN entre los días 12 y 21 en función del uso que haga el usuario de la APLICACIÓN de categoría a el día 11 . Proporciona la tasa de precisión del resultado predicho en comparación con el resultado real. (Nota: el equipo de prueba no puede participar en el entrenamiento y la verificación; de lo contrario, se tratará como una infracción)

(2) Predecir el uso de la APLICACIÓN por parte del usuario y predecir el tiempo de uso promedio diario efectivo del uso de la APLICACIÓN de categoría a por parte del usuario desde el día 12 al 21 en función del uso del usuario de la APLICACIÓN de categoría a desde el 1 al día 11 El índice de evaluación es MMSE.
MMSE = ∑ ( yi − yi ^ ) ∑ ( yi − yi ‾ ) MMSE = \sqrt{\frac{\sum(y_i-\hat{y_i})}{\sum(y_i-\overline{y_i})}}MMSE=( yyoyyo)( yyoyyo^)

donde yi y_iyyoIndica el valor real de la duración del uso; yi ^ \hat{y_i}yyo^Indica el valor predicho de la duración del uso; yi ‾ \overline{y_i}yyoIndica el promedio del tiempo de uso real de todos los usuarios. Da el NMSE entre los resultados previstos y verdaderos. (Nota: el equipo de prueba no puede participar en el entrenamiento y la verificación; de lo contrario, se tratará como una infracción)

Los datos de data.csv provienen de los datos de seguimiento de más de 40 000 usuarios de teléfonos inteligentes de una empresa durante 30 días consecutivos en un año determinado. El formato de la tabla es el siguiente. Utilice el modelo XGBoost para predecir el día 12 al 11 según el uso de la aplicación de categoría a del usuario desde el día 1 hasta el día 11. El tiempo promedio de uso diario válido de una aplicación de categoría a por parte de un usuario durante 21 días. El índice de evaluación es MMSE.

número variable nombre de la variable paráfrasis
1 fluido identificación de usuario
2 categoría Categoría de APP (categoría a a z, 26 categorías en total)
3 tipo_aplicación Tipo de aplicación: sistema incorporado, instalado por los usuarios
4 día_de_inicio El día de inicio de uso, el valor es 1-30 (Nota: el día de inicio de uso de las dos primeras filas de los datos del primer día es 0, lo que indica que se usa el día anterior a este día)
5 hora de inicio Usar hora de inicio
6 día final día de fin de uso
7 hora de finalización Usar hora de finalización
8 duración Duración de uso (segundos)
9 up_flow tráfico ascendente
10 flujo_descendente Tráfico descendente

2 ideas de modelado

primera pregunta:

  1. Preprocesamiento de datos: Realice la limpieza de datos y la extracción de características en 20 tipos de datos de aplicaciones comúnmente utilizados por los usuarios. Los algoritmos PCA y LDA se pueden usar para reducir la dimensionalidad y reducir la complejidad computacional.

  2. Algoritmo de agrupamiento:
    a. K-medias: al realizar el agrupamiento de datos, seleccione diferentes valores de K para múltiples experimentos y seleccione el resultado de agrupamiento óptimo. Los indicadores de evaluación, como el coeficiente de silueta y el índice de Calinski-Harabaz, se pueden utilizar para la comparación y la selección.
    b. DBSCAN: utilice la densidad para agrupar puntos de datos sin especificar el número de grupos por adelantado. Cuando se utiliza un algoritmo de agrupamiento basado en densidad, se pueden obtener diferentes efectos de agrupamiento ajustando el parámetro de radio y el parámetro de densidad.
    C. Agrupamiento jerárquico: se puede dividir en métodos de arriba hacia abajo y de abajo hacia arriba. Al calcular iterativamente la similitud entre cada punto de datos, los puntos de datos se fusionan gradualmente y, finalmente, se obtiene el resultado de la agrupación.

    D. Algoritmo de agrupamiento mejorado

    E. Algoritmo de agrupamiento profundo

  3. Análisis de resultados de agrupamiento: después de seleccionar el resultado de agrupamiento óptimo, perfile a los usuarios de diferentes categorías. Analice las características de comportamiento de los usuarios de cada categoría (como el tiempo de uso, la frecuencia de uso, la duración del uso, la preferencia, etc.) y etiquete a los usuarios en función de los retratos de los usuarios. De acuerdo con las etiquetas de los usuarios, recomiende productos de aplicaciones de diferentes categorías.

Segunda pregunta:

  1. Preprocesamiento de datos: realice la limpieza de datos y la extracción de funciones en los datos de registro de uso de la aplicación del usuario, como contar la cantidad de veces y la duración del uso de cada aplicación por parte del usuario.
  2. Predicción de problemas de clasificación: establezca un modelo de clasificación, use los registros de uso de la aplicación del usuario durante 1 a 11 días, use ingeniería de características para procesar los datos y seleccione un algoritmo de clasificación apropiado para entrenamiento y prueba, como árboles de decisión, bosques aleatorios, vector de soporte máquinas, algoritmo de clasificación de aprendizaje automático mejorado. Finalmente, el conjunto de prueba se usa para verificar el modelo y evaluar la precisión del modelo.
  3. Predicción de problemas de regresión: establezca un modelo de regresión, use los registros de uso de la aplicación del usuario durante 1 a 11 días, use la ingeniería de funciones para procesar los datos y seleccione un algoritmo de regresión adecuado para el entrenamiento y las pruebas, como la regresión lineal, la regresión del árbol de decisión y regresión de redes neuronales. Use el conjunto de prueba para verificar el modelo y evaluar la precisión del modelo, puede usar el índice de evaluación NMSE.

3 Problema 1 Código de implementación

[2023 2nd Dingding Cup College Student Big Data Challenge Ronda preliminar] Ronda preliminar A: Problema de análisis de datos de monitoreo de usuarios de teléfonos inteligentes: análisis de código Python

4 Pregunta 2 Código de implementación

4.1 Problema de clasificación: predecir si usar la categoría a APP

(1) Para la parte de ingeniería de funciones, consulte el blog de la Pregunta 1

[2023 2nd Dingding Cup College Student Big Data Challenge Ronda preliminar] Ronda preliminar A: Problema de análisis de datos de monitoreo de usuarios de teléfonos inteligentes: análisis de código Python

(2) lectura de datos

Los datos de 1 a 11 días se usan como conjunto de entrenamiento y los datos de 12 a 21 días se usan como conjunto de prueba

Cree una clasificación. Tenga en cuenta que un usuario tiene varios registros de uso. En el conjunto de prueba, debe desduplicarse de acuerdo con la identificación del usuario antes de predecir

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import warnings
warnings.filterwarnings("ignore")

# 读取全部数据集
# 读取训练集
train_folder_path = '初赛数据集/训练集'
train_dfs = []
for filename in os.listdir(train_folder_path):
    if filename.endswith('.txt'):
        csv_path = os.path.join(train_folder_path, filename)
        tempdf = pd.read_csv(csv_path)
        train_dfs.append(tempdf)
train_df = pd.concat(train_dfs,axis=0)
# 读取测试集
test_folder_path = '初赛数据集/测试集'
test_dfs = []
for filename in os.listdir(test_folder_path):
    if filename.endswith('.txt'):
        csv_path = os.path.join(test_folder_path, filename)
        tempdf = pd.read_csv(csv_path)
        test_dfs.append(tempdf)
test_df = pd.concat(test_dfs,axis=0)
# 提取特征和标签
X_train = train_df.drop(['category','uid','appid'], axis=1)
y_train = train_df['category']

X_test = test_df.drop(['category','uid','appid'], axis=1)
y_test = test_df['category']

(3) Entrenamiento modelo

# 训练决策树模型
dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train, y_train)
dt_y_pred = dt_model.predict(X_test)
dt_accuracy = accuracy_score(y_test, dt_y_pred)
print('决策树模型的准确率:', dt_accuracy)

Precisión del modelo de árbol de decisión: 0.8853211009174312


# 训练随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
rf_y_pred = rf_model.predict(X_test)
rf_accuracy = accuracy_score(y_test, rf_y_pred)
print('随机森林模型的准确率:', rf_accuracy)

Precisión del modelo de bosque aleatorio: 0.9724770642201835

# 训练支持向量机模型
svc_model = SVC(kernel='linear')
svc_model.fit(X_train, y_train)
svc_y_pred = svc_model.predict(X_test)
svc_accuracy = accuracy_score(y_test, svc_y_pred)

print('支持向量机模型的准确率:', svc_accuracy)

Precisión del modelo SVM: 0.9513251783893986

4.2 Problema de regresión

(1) Parte de extracción de características

  • También se pueden agregar las funciones de tiempo diario de los últimos 11 días, día, hora, minuto, funciones de tiempo como días festivos, fines de semana y días hábiles.
  • El tiempo total de uso de los usuarios en aplicaciones de categoría a en los últimos 11 días
  • La cantidad de veces que los usuarios han usado aplicaciones de la categoría a en los últimos 11 días
  • Tendencia de la curva de usuarios para aplicaciones de categoría a en los últimos 11 días
  • Otras características relacionadas con las aplicaciones de categoría a

leer datos


import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
import holidays
import os

# 加载 APP 类别文件
app_class = pd.read_csv('初赛数据集/app_class.csv',names=['appid','app_type'])
app_type_dict = dict(zip(app_class['appid'], app_class['app_type']))

# 读取训练集,该文件夹下面包括day01.txt到day21.txt,总共21个文件
train_folder_path = '初赛数据集/问题2数据集'
train_dfs = []
cols = ['uid','appid','app_type','start_day','start_time','end_day','end_time','duration','up_flow','down_flow']
for filename in os.listdir(train_folder_path):
    if filename.endswith('.txt'):
        csv_path = os.path.join(train_folder_path, filename)
        tempdf = pd.read_csv(csv_path,names=cols)
        train_dfs.append(tempdf)
data = pd.concat(train_dfs,axis=0)
data.shape

Preprocesamiento de datos

# 处理app类别
data['category'] = data['appid'].map(app_type_dict)
# 处理时间格式
data['start_time'] = pd.to_datetime(data['start_time'])
data['end_time'] = pd.to_datetime(data['end_time'])

# 构建"使用时长(小时)"特征
data['duration_hour'] = (data['end_time'] - data['start_time']).dt.seconds / 3600
# 缺失值处理
data = data.dropna()

# 提取时间特征
data['start_time_day'] = data.start_time.dt.day
data['start_time_hour'] = data.start_time.dt.hour
data['start_time_minute'] = data.start_time.dt.minute


# 异常值处理(例如使用时长小于0或大于24小时的数据)
data = data[(data['duration_hour'] >= 0) & (data['duration_hour'] <= 24)]

# 构建训练集和测试集
train = data[data['start_day'] <= 11]
test = data[(data['start_day'] >= 12) & (data['start_day'] <= 21)]

ingeniería de funciones

# 提取过去11天用户对a类APP的总使用时长
。。。略
# 提取过去11天用户对a类APP的使用次数
。。。略


# 将特征合并到训练集和测试集中
train = pd.merge(train, total_duration, on='uid', how='left')
train = pd.merge(train, count, on='uid', how='left')

test = pd.merge(test, total_duration, on='uid', how='left')
test = pd.merge(test, count, on='uid', how='left')


# 缺失值处理
train = train.fillna(0)
test = test.fillna(0)

# 选择必要的特征
features = ['a_total_duration', 'a_count','start_time_day','start_time_hour','start_time_minute']
# 构建训练集和测试集的特征矩阵和目标变量
。。。略


X_test = test[features].values
mean_test_duration = test.groupby('uid')['duration_hour'].mean()
y_test = test['uid'].map(dict(mean_test_duration))

(2) Parte de entrenamiento modelo

Usando el modelo de regresión XGB, también puede usar LGB, regresión lineal, regresión de árbol de decisión, regresión de red neuronal y otros modelos. Además, debe ajustar los parámetros. El método de aprendizaje automático puede considerar el método de optimización de cuadrícula.


import xgboost as xgb
from sklearn.model_selection import GridSearchCV


# 特征归一化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.fit_transform(X_test)

# XGBoost回归模型,还可以使用线性回归、决策树回归、神经网络回归
xgbmodel = xgb.XGBRegressor(
            objective='reg:squarederror',
            n_jobs=-1,
            n_estimators=1000,
            max_depth=7,
            subsample=0.8,
            learning_rate=0.05,
            gamma=0,
            colsample_bytree=0.9,
            random_state=2021, max_features=None, alpha=0.3)

# 训练模型
xgbmodel.fit(X_train, y_train)

inserte la descripción de la imagen aquí

(3) Evaluación del modelo
Realizada de acuerdo con la fórmula dada en el título, la fórmula es la siguiente
MMSE = ∑ ( yi − yi ^ ) ∑ ( yi − yi ‾ ) MMSE = \sqrt{\frac{\sum(y_i-\ sombrero{y_i})} {\sum(y_i-\overline{y_i})}}MMSE=( yyoyyo)( yyoyyo^)


from sklearn.metrics import mean_squared_error, mean_absolute_error

def MMSE(y_test, y_pred):
    # 计算实际值与预测值之间的平均误差
    error = y_test - y_pred
    # 计算分子和分母
    numerator = np.sum(np.square(error))
    denominator = np.sum(np.square(y_test - np.mean(y_test)))
    # 计算 MMSE
    mmse = np.sqrt(numerator / denominator)
    return mmse
# 对测试集进行预测
y_pred = xgbmodel.predict(X_test)

# 计算评价指标
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
mmse = MMSE(y_test, y_pred)
print("MMSE: {:.4f},MSE: {:.4f}, MAE: {:.4f}".format(mmse,mse, mae))

MMSE: 1,0709, MSE: 0,0432, MAE: 0,1181

4 descargas

Vea la parte inferior del artículo de Zhihu, después de la descarga, se incluye el código completo de todas las preguntas

zhuanlan.zhihu.com/p/643785015

Supongo que te gusta

Origin blog.csdn.net/weixin_43935696/article/details/131895788
Recomendado
Clasificación