28 de abril de 2023

Aula de Hoje

  • Regressão Logística

    • Definição

    • Exemplo Análise de Crédito

  • Seleção de Variáveis

Regressão Logística

Regressão Logística

  • É o modelo mais utilizado para análise de crédito.

  • É um tipo de Modelo Linear Generalizado, onde a distribuição da variável resposta é binária.

  • Seja \(Y_i\) variável aleatória que assume valores \(y_i \in \{0,1\}\) com probabilidade \(1-\pi_i\) e \(\pi_i\), respectivamente.

\[P(Y_i = y_i) = \pi_i^{y_i}(1-\pi_i)^{(1-y_i)} = \begin{cases} \pi_i & \mbox{se } y_i=1 \\ 1-\pi_i & \mbox{se } y_i=0 \end{cases} \] com \(\pi_i\in[0,1]\).

Inferência para Dados Binários

  • Dados binários: se assumirmos que \(\pi_i=\pi\) para todo \(i\), e que as observações \(Y_i\) são independentes, podemos encontrar o EMV para \(\pi\) como:

\[\mathcal{L}(\pi; \boldsymbol y) = \prod_{i=1}^n P(Y_i=y_i) = \prod_{i=1}^n \pi^{y_i}(1-\pi)^{(1-y_i)} \] \[\hat{\pi} = \frac{\sum_{i=1}^n y_i}{n} \]

Inferência para Dados Binários

  • No entanto, vamos assumir que:

    • cada \(\pi_i\) é diferente;

    • e \(\pi_i\) é uma função de covariáveis \(\boldsymbol{X}_i\), tal que:

    \[\pi_i = E(Y_i | \boldsymbol X_i) \]

Regressão Logística

  • Um modelo linear (\(E(Y_i|\boldsymbol X_i)=\boldsymbol X_i'\boldsymbol\beta\)) não vai funcionar porque \(\boldsymbol X_i'\boldsymbol\beta\) pode assumir qualquer valor!

  • Uma maneira de modelar as probabilidades é considerar o logaritmo da chance:

\[ \mbox{logit}(\pi_i) = \log \left( \frac{\pi_i}{1-\pi_i}\right) = \boldsymbol X_i'\boldsymbol\beta \]

\[\pi_i = \mbox{logit}^{-1}(\boldsymbol X_i'\boldsymbol\beta) = \frac{\exp(\boldsymbol X_i'\boldsymbol\beta)}{1+\exp(\boldsymbol X_i'\boldsymbol\beta)} \]

Regressão Logística

  • Podemos escrever a log-verossimilhança considerando \(\pi_i(\boldsymbol \beta)\).

  • Depois, podemos encontrar numericamente o EMV para \(\boldsymbol \beta\).

  • As propriedades do EMV garantem que teremos uma distribuição assintótica para \(\hat{\boldsymbol \beta}\). Essa distribuição assintótica é normal, e nos fornece uma estimativa para a variância de \(\hat{\boldsymbol \beta}\).

  • Com isso, podemos fazer o teste de significância para \(\hat{\boldsymbol \beta}\) (teste de hipóteses com \(H_0: \beta=0\)).

Regressão Logística

  • Vamos continuar com o Exemplo de Análise de Crédito da aula passada.

  • Antes de ajustar o modelo de regressão, vamos:

    • recodificar algumas variáveis categóricas para facilitar a interpretação dos modelos;

    • separar os dados em banco de treinamento e banco de teste.

Exemplo

1) Recodificando as variáveis:

  • Execute os comandos da primeira parte da aula de hoje.

  • Quais variáveis estão sendo recodificadas?

Exemplo

Agora vamos separar o banco de treinamento e o banco de teste.

  • Vamos sortear 644 observações para o banco de treinamento, e as 356 restantes formarão o banco de teste.
## Separando Banco de Treinamento
set.seed(123)
index = sort(sample(nrow(credit), 644, replace=F))
table(credit$class[index])
## 
##   0   1 
## 455 189

Exemplo

Agora vamos separar o banco de treinamento e o banco de teste.

train.db <- credit.rcd[index,]
valid.db <- credit.rcd[-index,]

Regressão Logística - Exemplo

Regressão Logística

Voltando para a Regressão Logística…

  • Vamos ajustar um modelo logístico para a classificação dos clientes (\(Y\)), usando como covariáveis Idade e Duração do empréstimo (contínuas), no banco de treinamento.
## Ajustando modelo de regressão logística com Idade e Duração
reg <- glm(class ~ age + duration, data=credit[index,], family=binomial(link="logit"))

summary(reg)

Regressão Logística

  • Mais detalhes sobre a estimação desse modelo: Seção 4.2.1

  • Interpretação dos coeficientes: por causa do formato da função de ligação do modelo logístico, temos que \(\exp(\boldsymbol \beta)\) é o efeito multiplicativo na razão da chance \(\frac{\pi_i}{1-\pi_i}\).

Regressão Logística com Variáveis Categóricas

  • Vamos considerar agora um modelo para a classificação dos clientes incluindo como covariável Histórico (categórica) credit_history.
## Ajustando modelo de regressão logística com Histórico
reg <- glm(class ~ credit_history, data=credit, family=binomial(link="logit"))

summary(reg)

Regressão Logística com Variáveis Categóricas

## valor previsto por categoria de Histórico
cbind( prop.table(table(credit$credit_history,credit$class),1),
       logit=predict(reg,
                     newdata=data.frame(credit_history=levels(credit$credit_history)),
                     type="response"))
##             0         1     logit
## A30 0.3750000 0.6250000 0.6250000
## A31 0.4285714 0.5714286 0.5714286
## A32 0.6811321 0.3188679 0.3188679
## A33 0.6818182 0.3181818 0.3181818
## A34 0.8293515 0.1706485 0.1706485

Regressão Logística com Variáveis Categóricas

  • Vamos ajustar agora com duas variáveis categóricas:
    • Histórico (credit_history);
    • Motivo do empréstimo (purpose).
  • Para isso, vamos usar o banco recodificado (com menos categorias) credit.rcd.
## Ajustando modelo de regressão logística com Histórico e Motivo
reg <- glm(class ~ credit_history*purpose,data=credit.rcd,family=binomial(link="logit"))

Regressão Logística com Variáveis Categóricas

## Valores estimados por categoria
attach(credit.rcd)
p.class = matrix( predict(reg, newdata = data.frame(
    credit_history = rep(levels(credit_history),each=length(levels(purpose))),
    purpose = rep(levels(purpose),length(levels(credit_history))) ),
  type="response"), ncol=length(levels(credit_history)), nrow=length(levels(purpose)) )
rownames(p.class) <- levels(purpose)
colnames(p.class) <- levels(credit_history)

Regressão Logística com Variáveis Categóricas

p.class
##                    all credits paid back duly critical account
## Car (new)                           0.2435897        0.7368421
## Car (used)                          0.1111111        0.3750000
## Domestic equipment                  0.1313869        0.5161290
## Else                                0.3333333        0.9999995
## Studies-Business                    0.2051282        0.6071429
##                    existing credits paid back duly till now
## Car (new)                                         0.4087591
## Car (used)                                        0.1694915
## Domestic equipment                                0.2996942
## Else                                              0.1666667
## Studies-Business                                  0.3595506

Regressão Logística com Variáveis Categóricas

## Razão das chances
p.class/(1-p.class)
##                    all credits paid back duly critical account
## Car (new)                           0.3220339     2.800000e+00
## Car (used)                          0.1250000     6.000000e-01
## Domestic equipment                  0.1512605     1.066667e+00
## Else                                0.5000000     2.118180e+06
## Studies-Business                    0.2580645     1.545455e+00
##                    existing credits paid back duly till now
## Car (new)                                         0.6913580
## Car (used)                                        0.2040816
## Domestic equipment                                0.4279476
## Else                                              0.2000000
## Studies-Business                                  0.5614035

Regressão Logística com Variáveis Categóricas

  • \(Y_i=1\): mau cliente e \(Y_i=0\): bom cliente

  • Razão de chances:

\[\frac{\pi_i}{1-\pi_i} = \frac{P(Y_i=1)}{P(Y_i=0)}\]

é a razão entre a probabilidade de classificar como “mau” cliente e a probabilidade de classificar como “bom” cliente.

Seleção de Variáveis

Seleção de Variáveis

Como selecionar quais variáveis incluir no modelo?

  • Todas as Regressões Possíveis (All Regressions)

  • Inclusão Passo a Frente (Forward Selection)

  • Eliminação Passo Atrás (Backward Selection)

  • Seleção Passo-a-Passo (Stepwise Selection)

Seleção de Variáveis

Como selecionar quais variáveis incluir no modelo?

  • Em todos esses métodos, vamos comparar o ajuste de modelos com diferentes conjuntos de covariáveis.

  • Os modelos serão comparados de acordo com algum critério.

    • AIC (\(k=2\)) e BIC (\(k=\log(n)\)):

    \[-\log \mathcal{L} + k \cdot p \] onde \(\mathcal{L}\) é a log-verossimilhança, \(p\) é o número de parâmetros, e \(k\) é o termo de penalização.

Seleção de Variáveis

  • Todas as Regressões Possíveis:

    • Testa de maneira iterativa todos os subconjuntos possíveis de variáveis explicativas.

    • O número de modelos possíveis (~ \(2^p\)) pode ser muito grande e tornar a avaliação de todos os modelos inviável.

Seleção de Variáveis

  • Inclusão Passo a Frente (Forward Selection):

    • começa com o modelo nulo (sem nenhuma covariável);

    • depois a inclusão de cada covariável é testada (baseada no critério que escolher);

    • incluímos a variável que mais melhora (se houver) o ajuste do modelo;

    • repetimos esse processo até que não haja mais melhora no modelo ao incluir variáveis.

Seleção de Variáveis

  • Eliminação Passo Atrás (Backward Selection):

    • começa com o modelo cheio (com todas as covariáveis);

    • depois a exclusão de cada covariável é testada (baseada no critério que escolher);

    • excluímos a variável que mais afeta (se houver) o ajuste do modelo;

    • repetimos esse processo até que não haja mais melhora no modelo ao excluir variáveis.

Seleção de Variáveis

  • Seleção Passo-a-Passo (Stepwise Selection):

    • é uma mistura de forward e backward;

    • faz um passo de forward testando a inclusão de variáveis, e depois um passo backward testando a exclusão;

    • isso é feito até chegar em um modelo que já tenha sido testado antes, e que não haja mais melhora no ajuste do modelo.

Seleção de Variáveis - Exemplo

  • Inclusão Passo a Frente (Forward Selection):
predictors <- names(credit.rcd) [-grep('class', names(credit.rcd))]
formula <- as.formula(paste("y ~ ", paste(names(credit.rcd[,predictors]), collapse="+")))
logit <- glm(class ~ 1, data=train.db, family=binomial)

for.sel <- step(logit,direction='forward', trace=FALSE, # mudar para trace=TRUE
                k=log(nrow(train.db)), scope=list(upper=formula))

Seleção de Variáveis - Exemplo

  • Eliminação Passo Atrás (Backward Selection):
logit <- glm(class ~ ., data=train.db[,c("class",predictors)], family=binomial)

back.sel <- step(logit,direction='backward',trace=FALSE, # mudar para trace=TRUE
                 k=log(nrow(train.db)))

Seleção de Variáveis - Exemplo

Exercício:

  • Compare os modelos selecionados pelos dois métodos.

  • Ajustar Stepwise Selection: direction="both"