Menu iconMenu icon
Ingeniería de Características para el Aprendizaje Automático Moderno con Scikit-Learn

Capítulo 2: Ingeniería de Características para Modelos Predictivoscsv

2.3 Ejercicios Prácticos para el Capítulo 2

Estos ejercicios te ayudarán a practicar técnicas de ingeniería de características específicamente para modelos de clasificación y regresión. Cada ejercicio incluye una solución con código como guía.

Ejercicio 1: Calcular Recencia para Cada Cliente

En un conjunto de datos de retail, calcula la característica Recencia para cada cliente, que representa el número de días desde su última compra. Usa esta característica para predecir el compromiso del cliente.

  1. Carga el conjunto de datos.
  2. Convierte la columna PurchaseDate al formato datetime.
  3. Calcula la Recencia como el número de días desde la compra más reciente.
import pandas as pd

# Sample retail data
data = {'CustomerID': [1, 2, 1, 3, 2],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01']}
df = pd.DataFrame(data)

# Solution: Calculate Recency
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
most_recent_date = df['PurchaseDate'].max()
df['Recency'] = (most_recent_date - df['PurchaseDate']).dt.days

# Get the minimum recency for each customer
recency_df = df.groupby('CustomerID')['Recency'].min().reset_index()

print("\\nData with Recency Feature:")
print(recency_df)

En esta solución:

La Recencia se calcula como el número de días desde la última compra para cada cliente, indicando su compromiso reciente.

Ejercicio 2: Calcular el Valor Promedio de Compra (Valor Monetario)

Calcula el Valor Promedio de Compra para cada cliente, indicando su comportamiento típico de gasto. Esta es una característica clave para predecir el valor de vida del cliente (CLTV).

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y calcula el promedio de Total Spend.
# Sample retail data with Total Spend
data = {'CustomerID': [1, 2, 1, 3, 2],
        'Total Spend': [200, 150, 300, 250, 400]}
df = pd.DataFrame(data)

# Solution: Calculate Average Purchase Value
monetary_value_df = df.groupby('CustomerID')['Total Spend'].mean().reset_index()
monetary_value_df.rename(columns={'Total Spend': 'AvgPurchaseValue'}, inplace=True)

print("\\nData with Average Purchase Value Feature:")
print(monetary_value_df)

En esta solución:

El AvgPurchaseValue representa el valor promedio de transacción de cada cliente, proporcionando información sobre sus hábitos de gasto.

Ejercicio 3: Calcular la Frecuencia de Compra para Cada Cliente

Calcula la Frecuencia de Compra para cada cliente, indicando con qué frecuencia realizan compras. Una alta frecuencia de compra a menudo se correlaciona con un alto compromiso y lealtad.

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y cuenta el número de transacciones.
# Sample retail data with Purchase Frequency
data = {'CustomerID': [1, 2, 1, 3, 2, 3, 1],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01', '2023-08-05', '2023-08-10']}
df = pd.DataFrame(data)

# Solution: Calculate Purchase Frequency
frequency_df = df.groupby('CustomerID').size().reset_index(name='Frequency')

print("\\nData with Frequency Feature:")
print(frequency_df)

En esta solución:

La Frecuencia se calcula como el número de transacciones por CustomerID, mostrando con qué frecuencia cada cliente interactúa con el servicio.

Ejercicio 4: Calcular la Tendencia de Compra Usando Datos de Gasto

Calcula la Tendencia de Compra para capturar los cambios en el gasto de los clientes a lo largo del tiempo. Para cada cliente, utiliza su tendencia de gasto mensual para determinar si su gasto está aumentando, disminuyendo o se mantiene estable.

  1. Carga el conjunto de datos.
  2. Convierte PurchaseDate a mes y agrupa por CustomerID y Month.
  3. Calcula la pendiente del gasto a lo largo del tiempo para cada cliente.
import numpy as np

# Sample retail data with PurchaseDate and Total Spend
data = {'CustomerID': [1, 1, 1, 2, 2, 3, 3],
        'PurchaseDate': ['2023-07-01', '2023-08-01', '2023-09-01', '2023-07-01', '2023-08-01', '2023-07-01', '2023-08-01'],
        'Total Spend': [200, 250, 300, 400, 350, 150, 100]}
df = pd.DataFrame(data)
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
df['PurchaseMonth'] = df['PurchaseDate'].dt.to_period('M')

# Calculate monthly spending and slope
monthly_spend = df.groupby(['CustomerID', 'PurchaseMonth'])['Total Spend'].sum().reset_index()

# Function to calculate trend slope
def calculate_trend(customer_df):
    x = np.arange(len(customer_df))
    y = customer_df['Total Spend'].values
    if len(x) > 1:
        return np.polyfit(x, y, 1)[0]  # Linear trend slope
    return 0

# Apply trend calculation
trend_df = monthly_spend.groupby('CustomerID').apply(calculate_trend).reset_index(name='PurchaseTrend')

print("\\nData with Purchase Trend Feature:")
print(trend_df)

En esta solución:

La Tendencia de Compra captura la pendiente del gasto a lo largo del tiempo, revelando si el gasto de un cliente está aumentando, disminuyendo o se mantiene estable.

Ejercicio 5: Construir un Modelo de Regresión Logística Usando Características Diseñadas

Utilizando características como RecenciaFrecuencia y Valor Monetario, entrena un modelo de Regresión Logística para predecir el abandono.

  1. Calcula cada característica (recencia, frecuencia, valor monetario).
  2. Utiliza estas características para entrenar un modelo de regresión logística.
  3. Evalúa el rendimiento del modelo con la métrica de precisión (accuracy).
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Sample engineered data with churn label
data = {'CustomerID': [1, 2, 3, 4, 5],
        'Recency': [10, 30, 5, 40, 15],
        'Frequency': [5, 2, 7, 1, 3],
        'AvgPurchaseValue': [200, 150, 250, 100, 300],
        'Churn': [0, 1, 0, 1, 0]}  # 0: Not Churned, 1: Churned
df = pd.DataFrame(data)

# Define features and target
X = df[['Recency', 'Frequency', 'AvgPurchaseValue']]
y = df['Churn']

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Train logistic regression model
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)

# Predictions and evaluation
y_pred = log_reg.predict(X_test)
print("Model Accuracy:", accuracy_score(y_test, y_pred))

En esta solución:

  • RecenciaFrecuencia y AvgPurchaseValue se utilizan como características en un modelo de regresión logística para predecir el abandono.
  • Se calcula la precisión del modelo para evaluar su rendimiento.

Estos ejercicios abarcan pasos esenciales de ingeniería de características, desde calcular métricas de compromiso del cliente como Recencia y Frecuencia hasta implementar modelos que aprovechan estas características diseñadas. Al completar estos ejercicios, adquirirás experiencia práctica en la construcción y evaluación de características para modelos predictivos.

2.3 Ejercicios Prácticos para el Capítulo 2

Estos ejercicios te ayudarán a practicar técnicas de ingeniería de características específicamente para modelos de clasificación y regresión. Cada ejercicio incluye una solución con código como guía.

Ejercicio 1: Calcular Recencia para Cada Cliente

En un conjunto de datos de retail, calcula la característica Recencia para cada cliente, que representa el número de días desde su última compra. Usa esta característica para predecir el compromiso del cliente.

  1. Carga el conjunto de datos.
  2. Convierte la columna PurchaseDate al formato datetime.
  3. Calcula la Recencia como el número de días desde la compra más reciente.
import pandas as pd

# Sample retail data
data = {'CustomerID': [1, 2, 1, 3, 2],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01']}
df = pd.DataFrame(data)

# Solution: Calculate Recency
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
most_recent_date = df['PurchaseDate'].max()
df['Recency'] = (most_recent_date - df['PurchaseDate']).dt.days

# Get the minimum recency for each customer
recency_df = df.groupby('CustomerID')['Recency'].min().reset_index()

print("\\nData with Recency Feature:")
print(recency_df)

En esta solución:

La Recencia se calcula como el número de días desde la última compra para cada cliente, indicando su compromiso reciente.

Ejercicio 2: Calcular el Valor Promedio de Compra (Valor Monetario)

Calcula el Valor Promedio de Compra para cada cliente, indicando su comportamiento típico de gasto. Esta es una característica clave para predecir el valor de vida del cliente (CLTV).

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y calcula el promedio de Total Spend.
# Sample retail data with Total Spend
data = {'CustomerID': [1, 2, 1, 3, 2],
        'Total Spend': [200, 150, 300, 250, 400]}
df = pd.DataFrame(data)

# Solution: Calculate Average Purchase Value
monetary_value_df = df.groupby('CustomerID')['Total Spend'].mean().reset_index()
monetary_value_df.rename(columns={'Total Spend': 'AvgPurchaseValue'}, inplace=True)

print("\\nData with Average Purchase Value Feature:")
print(monetary_value_df)

En esta solución:

El AvgPurchaseValue representa el valor promedio de transacción de cada cliente, proporcionando información sobre sus hábitos de gasto.

Ejercicio 3: Calcular la Frecuencia de Compra para Cada Cliente

Calcula la Frecuencia de Compra para cada cliente, indicando con qué frecuencia realizan compras. Una alta frecuencia de compra a menudo se correlaciona con un alto compromiso y lealtad.

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y cuenta el número de transacciones.
# Sample retail data with Purchase Frequency
data = {'CustomerID': [1, 2, 1, 3, 2, 3, 1],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01', '2023-08-05', '2023-08-10']}
df = pd.DataFrame(data)

# Solution: Calculate Purchase Frequency
frequency_df = df.groupby('CustomerID').size().reset_index(name='Frequency')

print("\\nData with Frequency Feature:")
print(frequency_df)

En esta solución:

La Frecuencia se calcula como el número de transacciones por CustomerID, mostrando con qué frecuencia cada cliente interactúa con el servicio.

Ejercicio 4: Calcular la Tendencia de Compra Usando Datos de Gasto

Calcula la Tendencia de Compra para capturar los cambios en el gasto de los clientes a lo largo del tiempo. Para cada cliente, utiliza su tendencia de gasto mensual para determinar si su gasto está aumentando, disminuyendo o se mantiene estable.

  1. Carga el conjunto de datos.
  2. Convierte PurchaseDate a mes y agrupa por CustomerID y Month.
  3. Calcula la pendiente del gasto a lo largo del tiempo para cada cliente.
import numpy as np

# Sample retail data with PurchaseDate and Total Spend
data = {'CustomerID': [1, 1, 1, 2, 2, 3, 3],
        'PurchaseDate': ['2023-07-01', '2023-08-01', '2023-09-01', '2023-07-01', '2023-08-01', '2023-07-01', '2023-08-01'],
        'Total Spend': [200, 250, 300, 400, 350, 150, 100]}
df = pd.DataFrame(data)
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
df['PurchaseMonth'] = df['PurchaseDate'].dt.to_period('M')

# Calculate monthly spending and slope
monthly_spend = df.groupby(['CustomerID', 'PurchaseMonth'])['Total Spend'].sum().reset_index()

# Function to calculate trend slope
def calculate_trend(customer_df):
    x = np.arange(len(customer_df))
    y = customer_df['Total Spend'].values
    if len(x) > 1:
        return np.polyfit(x, y, 1)[0]  # Linear trend slope
    return 0

# Apply trend calculation
trend_df = monthly_spend.groupby('CustomerID').apply(calculate_trend).reset_index(name='PurchaseTrend')

print("\\nData with Purchase Trend Feature:")
print(trend_df)

En esta solución:

La Tendencia de Compra captura la pendiente del gasto a lo largo del tiempo, revelando si el gasto de un cliente está aumentando, disminuyendo o se mantiene estable.

Ejercicio 5: Construir un Modelo de Regresión Logística Usando Características Diseñadas

Utilizando características como RecenciaFrecuencia y Valor Monetario, entrena un modelo de Regresión Logística para predecir el abandono.

  1. Calcula cada característica (recencia, frecuencia, valor monetario).
  2. Utiliza estas características para entrenar un modelo de regresión logística.
  3. Evalúa el rendimiento del modelo con la métrica de precisión (accuracy).
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Sample engineered data with churn label
data = {'CustomerID': [1, 2, 3, 4, 5],
        'Recency': [10, 30, 5, 40, 15],
        'Frequency': [5, 2, 7, 1, 3],
        'AvgPurchaseValue': [200, 150, 250, 100, 300],
        'Churn': [0, 1, 0, 1, 0]}  # 0: Not Churned, 1: Churned
df = pd.DataFrame(data)

# Define features and target
X = df[['Recency', 'Frequency', 'AvgPurchaseValue']]
y = df['Churn']

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Train logistic regression model
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)

# Predictions and evaluation
y_pred = log_reg.predict(X_test)
print("Model Accuracy:", accuracy_score(y_test, y_pred))

En esta solución:

  • RecenciaFrecuencia y AvgPurchaseValue se utilizan como características en un modelo de regresión logística para predecir el abandono.
  • Se calcula la precisión del modelo para evaluar su rendimiento.

Estos ejercicios abarcan pasos esenciales de ingeniería de características, desde calcular métricas de compromiso del cliente como Recencia y Frecuencia hasta implementar modelos que aprovechan estas características diseñadas. Al completar estos ejercicios, adquirirás experiencia práctica en la construcción y evaluación de características para modelos predictivos.

2.3 Ejercicios Prácticos para el Capítulo 2

Estos ejercicios te ayudarán a practicar técnicas de ingeniería de características específicamente para modelos de clasificación y regresión. Cada ejercicio incluye una solución con código como guía.

Ejercicio 1: Calcular Recencia para Cada Cliente

En un conjunto de datos de retail, calcula la característica Recencia para cada cliente, que representa el número de días desde su última compra. Usa esta característica para predecir el compromiso del cliente.

  1. Carga el conjunto de datos.
  2. Convierte la columna PurchaseDate al formato datetime.
  3. Calcula la Recencia como el número de días desde la compra más reciente.
import pandas as pd

# Sample retail data
data = {'CustomerID': [1, 2, 1, 3, 2],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01']}
df = pd.DataFrame(data)

# Solution: Calculate Recency
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
most_recent_date = df['PurchaseDate'].max()
df['Recency'] = (most_recent_date - df['PurchaseDate']).dt.days

# Get the minimum recency for each customer
recency_df = df.groupby('CustomerID')['Recency'].min().reset_index()

print("\\nData with Recency Feature:")
print(recency_df)

En esta solución:

La Recencia se calcula como el número de días desde la última compra para cada cliente, indicando su compromiso reciente.

Ejercicio 2: Calcular el Valor Promedio de Compra (Valor Monetario)

Calcula el Valor Promedio de Compra para cada cliente, indicando su comportamiento típico de gasto. Esta es una característica clave para predecir el valor de vida del cliente (CLTV).

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y calcula el promedio de Total Spend.
# Sample retail data with Total Spend
data = {'CustomerID': [1, 2, 1, 3, 2],
        'Total Spend': [200, 150, 300, 250, 400]}
df = pd.DataFrame(data)

# Solution: Calculate Average Purchase Value
monetary_value_df = df.groupby('CustomerID')['Total Spend'].mean().reset_index()
monetary_value_df.rename(columns={'Total Spend': 'AvgPurchaseValue'}, inplace=True)

print("\\nData with Average Purchase Value Feature:")
print(monetary_value_df)

En esta solución:

El AvgPurchaseValue representa el valor promedio de transacción de cada cliente, proporcionando información sobre sus hábitos de gasto.

Ejercicio 3: Calcular la Frecuencia de Compra para Cada Cliente

Calcula la Frecuencia de Compra para cada cliente, indicando con qué frecuencia realizan compras. Una alta frecuencia de compra a menudo se correlaciona con un alto compromiso y lealtad.

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y cuenta el número de transacciones.
# Sample retail data with Purchase Frequency
data = {'CustomerID': [1, 2, 1, 3, 2, 3, 1],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01', '2023-08-05', '2023-08-10']}
df = pd.DataFrame(data)

# Solution: Calculate Purchase Frequency
frequency_df = df.groupby('CustomerID').size().reset_index(name='Frequency')

print("\\nData with Frequency Feature:")
print(frequency_df)

En esta solución:

La Frecuencia se calcula como el número de transacciones por CustomerID, mostrando con qué frecuencia cada cliente interactúa con el servicio.

Ejercicio 4: Calcular la Tendencia de Compra Usando Datos de Gasto

Calcula la Tendencia de Compra para capturar los cambios en el gasto de los clientes a lo largo del tiempo. Para cada cliente, utiliza su tendencia de gasto mensual para determinar si su gasto está aumentando, disminuyendo o se mantiene estable.

  1. Carga el conjunto de datos.
  2. Convierte PurchaseDate a mes y agrupa por CustomerID y Month.
  3. Calcula la pendiente del gasto a lo largo del tiempo para cada cliente.
import numpy as np

# Sample retail data with PurchaseDate and Total Spend
data = {'CustomerID': [1, 1, 1, 2, 2, 3, 3],
        'PurchaseDate': ['2023-07-01', '2023-08-01', '2023-09-01', '2023-07-01', '2023-08-01', '2023-07-01', '2023-08-01'],
        'Total Spend': [200, 250, 300, 400, 350, 150, 100]}
df = pd.DataFrame(data)
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
df['PurchaseMonth'] = df['PurchaseDate'].dt.to_period('M')

# Calculate monthly spending and slope
monthly_spend = df.groupby(['CustomerID', 'PurchaseMonth'])['Total Spend'].sum().reset_index()

# Function to calculate trend slope
def calculate_trend(customer_df):
    x = np.arange(len(customer_df))
    y = customer_df['Total Spend'].values
    if len(x) > 1:
        return np.polyfit(x, y, 1)[0]  # Linear trend slope
    return 0

# Apply trend calculation
trend_df = monthly_spend.groupby('CustomerID').apply(calculate_trend).reset_index(name='PurchaseTrend')

print("\\nData with Purchase Trend Feature:")
print(trend_df)

En esta solución:

La Tendencia de Compra captura la pendiente del gasto a lo largo del tiempo, revelando si el gasto de un cliente está aumentando, disminuyendo o se mantiene estable.

Ejercicio 5: Construir un Modelo de Regresión Logística Usando Características Diseñadas

Utilizando características como RecenciaFrecuencia y Valor Monetario, entrena un modelo de Regresión Logística para predecir el abandono.

  1. Calcula cada característica (recencia, frecuencia, valor monetario).
  2. Utiliza estas características para entrenar un modelo de regresión logística.
  3. Evalúa el rendimiento del modelo con la métrica de precisión (accuracy).
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Sample engineered data with churn label
data = {'CustomerID': [1, 2, 3, 4, 5],
        'Recency': [10, 30, 5, 40, 15],
        'Frequency': [5, 2, 7, 1, 3],
        'AvgPurchaseValue': [200, 150, 250, 100, 300],
        'Churn': [0, 1, 0, 1, 0]}  # 0: Not Churned, 1: Churned
df = pd.DataFrame(data)

# Define features and target
X = df[['Recency', 'Frequency', 'AvgPurchaseValue']]
y = df['Churn']

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Train logistic regression model
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)

# Predictions and evaluation
y_pred = log_reg.predict(X_test)
print("Model Accuracy:", accuracy_score(y_test, y_pred))

En esta solución:

  • RecenciaFrecuencia y AvgPurchaseValue se utilizan como características en un modelo de regresión logística para predecir el abandono.
  • Se calcula la precisión del modelo para evaluar su rendimiento.

Estos ejercicios abarcan pasos esenciales de ingeniería de características, desde calcular métricas de compromiso del cliente como Recencia y Frecuencia hasta implementar modelos que aprovechan estas características diseñadas. Al completar estos ejercicios, adquirirás experiencia práctica en la construcción y evaluación de características para modelos predictivos.

2.3 Ejercicios Prácticos para el Capítulo 2

Estos ejercicios te ayudarán a practicar técnicas de ingeniería de características específicamente para modelos de clasificación y regresión. Cada ejercicio incluye una solución con código como guía.

Ejercicio 1: Calcular Recencia para Cada Cliente

En un conjunto de datos de retail, calcula la característica Recencia para cada cliente, que representa el número de días desde su última compra. Usa esta característica para predecir el compromiso del cliente.

  1. Carga el conjunto de datos.
  2. Convierte la columna PurchaseDate al formato datetime.
  3. Calcula la Recencia como el número de días desde la compra más reciente.
import pandas as pd

# Sample retail data
data = {'CustomerID': [1, 2, 1, 3, 2],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01']}
df = pd.DataFrame(data)

# Solution: Calculate Recency
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
most_recent_date = df['PurchaseDate'].max()
df['Recency'] = (most_recent_date - df['PurchaseDate']).dt.days

# Get the minimum recency for each customer
recency_df = df.groupby('CustomerID')['Recency'].min().reset_index()

print("\\nData with Recency Feature:")
print(recency_df)

En esta solución:

La Recencia se calcula como el número de días desde la última compra para cada cliente, indicando su compromiso reciente.

Ejercicio 2: Calcular el Valor Promedio de Compra (Valor Monetario)

Calcula el Valor Promedio de Compra para cada cliente, indicando su comportamiento típico de gasto. Esta es una característica clave para predecir el valor de vida del cliente (CLTV).

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y calcula el promedio de Total Spend.
# Sample retail data with Total Spend
data = {'CustomerID': [1, 2, 1, 3, 2],
        'Total Spend': [200, 150, 300, 250, 400]}
df = pd.DataFrame(data)

# Solution: Calculate Average Purchase Value
monetary_value_df = df.groupby('CustomerID')['Total Spend'].mean().reset_index()
monetary_value_df.rename(columns={'Total Spend': 'AvgPurchaseValue'}, inplace=True)

print("\\nData with Average Purchase Value Feature:")
print(monetary_value_df)

En esta solución:

El AvgPurchaseValue representa el valor promedio de transacción de cada cliente, proporcionando información sobre sus hábitos de gasto.

Ejercicio 3: Calcular la Frecuencia de Compra para Cada Cliente

Calcula la Frecuencia de Compra para cada cliente, indicando con qué frecuencia realizan compras. Una alta frecuencia de compra a menudo se correlaciona con un alto compromiso y lealtad.

  1. Carga el conjunto de datos.
  2. Agrupa por CustomerID y cuenta el número de transacciones.
# Sample retail data with Purchase Frequency
data = {'CustomerID': [1, 2, 1, 3, 2, 3, 1],
        'PurchaseDate': ['2023-07-01', '2023-07-10', '2023-07-15', '2023-07-20', '2023-08-01', '2023-08-05', '2023-08-10']}
df = pd.DataFrame(data)

# Solution: Calculate Purchase Frequency
frequency_df = df.groupby('CustomerID').size().reset_index(name='Frequency')

print("\\nData with Frequency Feature:")
print(frequency_df)

En esta solución:

La Frecuencia se calcula como el número de transacciones por CustomerID, mostrando con qué frecuencia cada cliente interactúa con el servicio.

Ejercicio 4: Calcular la Tendencia de Compra Usando Datos de Gasto

Calcula la Tendencia de Compra para capturar los cambios en el gasto de los clientes a lo largo del tiempo. Para cada cliente, utiliza su tendencia de gasto mensual para determinar si su gasto está aumentando, disminuyendo o se mantiene estable.

  1. Carga el conjunto de datos.
  2. Convierte PurchaseDate a mes y agrupa por CustomerID y Month.
  3. Calcula la pendiente del gasto a lo largo del tiempo para cada cliente.
import numpy as np

# Sample retail data with PurchaseDate and Total Spend
data = {'CustomerID': [1, 1, 1, 2, 2, 3, 3],
        'PurchaseDate': ['2023-07-01', '2023-08-01', '2023-09-01', '2023-07-01', '2023-08-01', '2023-07-01', '2023-08-01'],
        'Total Spend': [200, 250, 300, 400, 350, 150, 100]}
df = pd.DataFrame(data)
df['PurchaseDate'] = pd.to_datetime(df['PurchaseDate'])
df['PurchaseMonth'] = df['PurchaseDate'].dt.to_period('M')

# Calculate monthly spending and slope
monthly_spend = df.groupby(['CustomerID', 'PurchaseMonth'])['Total Spend'].sum().reset_index()

# Function to calculate trend slope
def calculate_trend(customer_df):
    x = np.arange(len(customer_df))
    y = customer_df['Total Spend'].values
    if len(x) > 1:
        return np.polyfit(x, y, 1)[0]  # Linear trend slope
    return 0

# Apply trend calculation
trend_df = monthly_spend.groupby('CustomerID').apply(calculate_trend).reset_index(name='PurchaseTrend')

print("\\nData with Purchase Trend Feature:")
print(trend_df)

En esta solución:

La Tendencia de Compra captura la pendiente del gasto a lo largo del tiempo, revelando si el gasto de un cliente está aumentando, disminuyendo o se mantiene estable.

Ejercicio 5: Construir un Modelo de Regresión Logística Usando Características Diseñadas

Utilizando características como RecenciaFrecuencia y Valor Monetario, entrena un modelo de Regresión Logística para predecir el abandono.

  1. Calcula cada característica (recencia, frecuencia, valor monetario).
  2. Utiliza estas características para entrenar un modelo de regresión logística.
  3. Evalúa el rendimiento del modelo con la métrica de precisión (accuracy).
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Sample engineered data with churn label
data = {'CustomerID': [1, 2, 3, 4, 5],
        'Recency': [10, 30, 5, 40, 15],
        'Frequency': [5, 2, 7, 1, 3],
        'AvgPurchaseValue': [200, 150, 250, 100, 300],
        'Churn': [0, 1, 0, 1, 0]}  # 0: Not Churned, 1: Churned
df = pd.DataFrame(data)

# Define features and target
X = df[['Recency', 'Frequency', 'AvgPurchaseValue']]
y = df['Churn']

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Train logistic regression model
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)

# Predictions and evaluation
y_pred = log_reg.predict(X_test)
print("Model Accuracy:", accuracy_score(y_test, y_pred))

En esta solución:

  • RecenciaFrecuencia y AvgPurchaseValue se utilizan como características en un modelo de regresión logística para predecir el abandono.
  • Se calcula la precisión del modelo para evaluar su rendimiento.

Estos ejercicios abarcan pasos esenciales de ingeniería de características, desde calcular métricas de compromiso del cliente como Recencia y Frecuencia hasta implementar modelos que aprovechan estas características diseñadas. Al completar estos ejercicios, adquirirás experiencia práctica en la construcción y evaluación de características para modelos predictivos.