Pular para o conteúdo
marketing digital

Modelos de ML que impulsionam resultados no marketing digital

Admin5 min de leitura
Modelos de ML que impulsionam resultados no marketing digital

Modelos de ML que impulsionam resultados no marketing digital

“Dados são o novo petróleo, mas o que realmente gera valor é a capacidade de transformá‑los em insights acionáveis.” – Andrew Ng

Neste artigo vamos explorar, de forma prática e detalhada, como aplicar Machine Learning a problemas reais de marketing digital. Você aprenderá a:

Identificar e preparar datasets adequados ao seu negócio; Realizar feature engineering que potencializa a performance dos modelos; Selecionar e treinar algoritmos preditivos (regressão, árvores, ensembles); Avaliar resultados com métricas que realmente importam para a tomada de decisão.

Tudo isso com exemplos de código em Python (scikit‑learn, pandas, matplotlib) e dicas de implantação que podem ser reproduzidas imediatamente.

Tecnologia e Inovação

1. Introdução ao Machine Learning no Marketing Digital

O marketing digital gera volumes massivos de dados: cliques, visualizações, conversões, tempo de permanência, interações sociais, entre outros. Quando esses dados são estruturados e analisados com técnicas de Machine Learning, surgem oportunidades de:

Problema de negócioTipo de modelo típicoValor gerado
Previsão de churn de assinantesClassificação bináriaRedução de churn em até 30 %
Otimização de lances em mídia pagaRegressãoAumento de ROI em 15 %
Segmentação de audiênciasClusteringCampanhas mais focadas
Score de propensão à compraClassificação multiclasseIncremento de conversão em 12 %

Para transformar esses casos em projetos de ML, seguimos um fluxo estruturado:

  • Entendimento do problema – definir objetivo de negócio e KPI.
  • Coleta e exploração de dados – identificar fontes, limpar, analisar.
  • Feature engineering – criar variáveis que carreguem sinal.
  • Seleção e treinamento de modelos – experimentar algoritmos.
  • Avaliação – usar métricas alinhadas ao objetivo.
  • Implantação – integrar ao pipeline de marketing.
  • Nos próximos tópicos vamos detalhar cada passo com foco em duas aplicações típicas: previsão de churn e previsão de taxa de cliques (CTR).


    2. Preparando o Dataset

    2.1 Fontes de dados comuns

    FonteTipo de informação
    Google AnalyticsSessões, taxa de rejeição, origem
    Plataforma de e‑mailAberturas, cliques, entregas
    CRMHistórico de compras, tickets
    Redes sociaisEngajamento, alcance, comentários
    Dados de campanha PPCImpressões, cliques, custo por clique

    Para o exemplo de churn, vamos usar um dataset público Telco Customer Churn (disponível no Kaggle). Ele contém informações demográficas, uso de serviços e se o cliente cancelou o contrato.

    # carregando o dataset
    

    import pandas as pd

    url = "https://raw.githubusercontent.com/IBM/telco-customer-churn-on-aws/master/data/Telco-Customer-Churn.csv" df = pd.read_csv(url)

    print(df.head())

    2.2 Limpeza e tratamento de valores ausentes

    # remover colunas irrelevantes
    

    df = df.drop(columns=['customerID'])

    converter total charges para numérico (há valores vazios)

    df['TotalCharges'] = pd.to_numeric(df['TotalCharges'], errors='coerce') df['TotalCharges'].fillna(df['TotalCharges'].median(), inplace=True)

    transformar variáveis categóricas em dummies

    cat_cols = df.select_dtypes(include=['object']).columns df = pd.get_dummies(df, columns=cat_cols, drop_first=True)

    print(df.shape)

    2.3 Divisão treino / teste

    from sklearn.model_selection import train_test_split
    

    X = df.drop('Churn_Yes', axis=1) y = df['Churn_Yes']

    X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y )


    3. Feature Engineering que faz a diferença

    3.1 Criação de variáveis temporais

    Em campanhas de mídia paga, a recência da última interação costuma ser um forte preditor. Suponha que tenhamos a data da última visita (last_visit) e a data atual.

    import numpy as np
    

    df['last_visit'] = pd.to_datetime(df['last_visit']) df['days_since_last'] = (pd.Timestamp('today') - df['last_visit']).dt.days

    3.2 Agrupamento de categorias de baixo volume

    Categorias com poucas ocorrências podem gerar ruído. Consolidamos em “Outros”.

    def consolidate_low_freq(series, threshold=0.01):
    

    freq = series.value_counts(normalize=True) rare = freq[freq < threshold].index return series.apply(lambda x: 'Outros' if x in rare else x)

    df['payment_method'] = consolidate_low_freq(df['payment_method'])

    3.3 Normalização de variáveis contínuas

    Para algoritmos baseados em distância (KNN, SVM), a escala importa.

    from sklearn.preprocessing import StandardScaler
    

    scaler = StandardScaler() num_cols = ['tenure', 'MonthlyCharges', 'TotalCharges', 'days_since_last'] X_train[num_cols] = scaler.fit_transform(X_train[num_cols]) X_test[num_cols] = scaler.transform(X_test[num_cols])


    4. Seleção e Treinamento de Modelos

    4.1 Algoritmos testados

    AlgoritmoTipoPor que usar?
    Logistic RegressionLinearBaseline interpretável
    Random ForestEnsembleCaptura interações não lineares
    XGBoostGradient BoostAlta performance em dados tabulares
    LightGBMGradient BoostMais rápido em grandes volumes

    4.2 Pipeline com Cross‑Validation

    from sklearn.pipeline import Pipeline
    

    from sklearn.compose import ColumnTransformer from sklearn.metrics import roc_auc_score, f1_score, classification_report from sklearn.model_selection import cross_val_score, StratifiedKFold from xgboost import XGBClassifier

    pipeline simples (sem transformação adicional)

    model = XGBClassifier( n_estimators=200, max_depth=5, learning_rate=0.05, subsample=0.9, colsample_bytree=0.9, random_state=42, use_label_encoder=False, eval_metric='logloss' )

    cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

    auc_scores = cross_val_score(model, X_train, y_train, cv=cv, scoring='roc_auc') print(f"ROC‑AUC médio (CV): {auc_scores.mean():.4f}")

    4.3 Ajuste fino (Hyperparameter Tuning)

    from sklearn.model_selection import RandomizedSearchCV
    

    import numpy as np

    param_grid = { 'n_estimators': np.arange(100, 500, 50), 'max_depth': np.arange(3, 10, 1), 'learning_rate': np.logspace(-3, -1, 5), 'subsample': [0.7, 0.8, 0.9, 1.0], 'colsample_bytree': [0.7, 0.8, 0.9, 1.0] }

    search = RandomizedSearchCV( estimator=model, param_distributions=param_grid, n_iter=30, scoring='roc_auc', cv=cv, random_state=42, n_jobs=-1, verbose=1 )

    search.fit(X_train, y_train) print("Melhores parâmetros:", search.best_params_) print("Melhor ROC‑AUC:", search.best_score_)

    4.4 Avaliação no conjunto de teste

    best_model = search.best_estimator_
    

    best_model.fit(X_train, y_train)

    y_pred = best_model.predict(X_test) y_proba = best_model.predict_proba(X_test)[:, 1]

    print("AUC:", roc_auc_score(y_test, y_proba)) print("F1:", f1_score(y_test, y_pred)) print(classification_report(y_test, y_pred))

    Interpretação dos resultados

    • AUC > 0.80 indica que o modelo distingue bem clientes que churnam vs. os que permanecem.
    • F1‑Score balanceia precisão e recall; essencial quando a classe positiva (churn) é minoritária.
    • O relatório de classificação ajuda a identificar desequilíbrios e a necessidade de ajuste de threshold.


    5. Métricas de avaliação alinhadas ao negócio

    No marketing digital, a métrica escolhida deve refletir o impacto financeiro. Algumas métricas avançadas:

    MétricaQuando usarInterpretação
    AUC‑ROCClassificação geralProbabilidade de ranking correto
    Lift (ganho)Campanhas segmentadasQuanto a taxa de conversão aumenta em um segmento vs. média
    Gain ChartAvaliar top‑kPercentual de respostas capturadas nos primeiros k% dos leads
    Profit Curve

    Artigos relacionados