Descrição:

A seguir, iremos analisar as reclamações recebidas por dois órgãos do governo federal, ANAC e INSS, a fim de verificar a insatisfação do cliente quanto aos serviços prestados por eles. Para isso, será utilizada a técnica de análise de sentimentos para detectar o nível de insastifação em cada reclamação. Num primeiro plano, foi realizado experimento humano de avaliação desse nível de insatisfação, feito pelo alunos da disciplina de Metodologia científica 2018.2 da UFCG, no qual cada reclamação era avaliada de 1 a 5, sendo que 1 equivalia a pouco insatisfeito e 5 muito insatisfeito.

Importando dados para um dataframe

avaliacao_humana = read_csv("../data/3-avaliacao-humana/avaliacoes-20181030.csv")
reclamacoes = read_csv("../data/3-avaliacao-humana/reclamacoes-avaliadas-20180703.csv")

Análise exploratória: etapa 1

A partir desse momento, iremos explorar um pouco das reclamações selecionadas.

A quantidade de caracteres em uma reclamação muda de um órgão federal para o outro?

A princípio é necessário calcular a quantidade de caracteres de cada reclamação e posteriormente adicionar o dado comprimento ao dataframe.

reclamacoes <- reclamacoes %>% 
    mutate(comprimento = str_length(reclamacao))
reclamacoes %>% 
  mutate(`Nível de insatisfação` = insatisfacao) %>% 
  ggplot(aes(x = orgao,
             y = comprimento,
             color = `Nível de insatisfação`)) +
  geom_jitter() +
  labs(title = "Quantidade de caracteres das reclamações",
       x = "Órgão fereral",
       y = "Comprimento da reclamação")

Como podemos ver no gráfico acima, o ANAC teve reclamações com número maior de caracteres e também com um nível maior de insatisfação. Já o INSS, teve uma maior homogeniedade de caracteres, só uma reclamação passou dos 1000 caracteres e com nota 5 insatisfação. A partir dessas conclusões podemos ver que reclamações que tiveram maior número de caracteres também teve maior número de grau de insatisfação.

Uma forma comum de se demostrar insatisfação por meio da escrita digital é adicionar pontos de exclamação e letras maiúsculas.

A partir do comentário acima, seria válido fazer a verificação de letras maiúsculas em cada reclamação e sinais de pontuação como a exclamação(!)

Assim como a visualizaação anterior, precisamos contabilizar a quantidade de letras maiúsculas e pontos de exclamação:

reclamacoes$numero_de_capslock <- str_count(reclamacoes$reclamacao,"\\b[A-Z]{2,}\\b")
reclamacoes$numero_de_exclamacoes <- str_count(reclamacoes$reclamacao, "!")
reclamacoes %>% 
  mutate(`Órgão federal` = orgao) %>% 
  ggplot(aes(y = numero_de_capslock,
             x = "",
             fill = `Órgão federal`)) +
  geom_violin() +
  labs(title = "Quantidade de reclamações em caixa alta",
       x = "",
       y = "Número de caracteres em CAPS")

Como podemos observar, a ANAC tem um número considerável de reclamações com caracteres em caixa alta, inclusive reclamações que ultrapassam a quantidade de 30 caracteres em caps. Já o INSS, tem uma presença menor de caracteres em caps em suas reclamações, inclusive com uma grande concentração de reclamações com caixa alta abaixo de 10 caracteres, um bom número, contando que início de frase comece com letra maiúscula, presença de nomes próprios, etc.

reclamacoes %>% 
  mutate(`Órgão federal` = orgao) %>% 
  ggplot(aes(y = numero_de_exclamacoes,
             x = "",
             fill = `Órgão federal`)) +
  geom_violin() +
  labs(title = "Quantidade de exclamações (!) em cada reclamação",
       x = "",
       y = "Número de exclamações")

Já para o número de exclamações, temos o seguinte cenário: o INSS tem uma maior concentração desse caractere, no entanto o ANAC, tem algumas reclamações com uma presença de mais de 6 exclamações.

Análise exploratória: etapa 2

Nesta etapa preparamos questionamentos para a análise das avaliações humanas para as reclamações.

A princípio, uma breve sumarização dos dados contidos nos resultados da avaliação humana:

avaliacao_humana %>% 
    group_by(`ID da reclamação`) %>% 
    arrange(`ID da reclamação`) %>% 
    summarise(media_reclamacao = mean(`Grau de insatisfação`),
              mediana_reclamacao = median(`Grau de insatisfação`),
              desvio = sd(`Grau de insatisfação`))

Como vemos, o desvio padrão das avaliações ficou muito baixo, o que mostra uma homogeneidade nos dados. Com isso, podemos concluir que as pessoas classificaram a reclamação com o mesmo grau de instatisfação.

Além disso, podemos também responder outra pergunta acerca dos dados. #### Dessa maneira, podemos dizer que pessoas que receberam a mesma reclamação classificaram igualmente?

distribuicao_avaliacao <- function(filtro) {
    result <- avaliacao_humana %>% 
        filter(`ID da reclamação` %in% filtro) %>% 
        
        ggplot(aes(x = reorder(`ID da reclamação`, `ID da reclamação`),
                   y = `Grau de insatisfação`,
                   color = Matrícula)) +
        geom_boxplot(outlier.colour = NA) + 
        geom_jitter(width = .2, alpha = .5, height = 0.05) + 
        labs(title = "Distribuição de notas por reclamação",
             x = "Id da reclamação")
    
    return(result)
}

Os classificadores humanos foram, de forma geral, inviesados a avaliarem uma reclamação como mais ou menos insatisfeita. Como o desvio padrão foi baixo, podemos inferir que os classificadores humanos concordam entre si, mostrando que não houveram pessoas, pelo menos não de maneira expressiva, que classificasse uma reclamação num maior ou menor nível de satisfação.

distribuicao_avaliacao(1:15)

distribuicao_avaliacao(16:30)

distribuicao_avaliacao(30:45)

distribuicao_avaliacao(45:60)

Distribuição de notas do experimento humano

reclamacoes %>% 
    ggplot(aes(x = id, 
               y = insatisfacao, 
               color = avaliadores)) +
    geom_jitter(alpha = 0.7) +
    xlab("Id da Reclamação") +
    ylab("Avaliação humana das reclamações") +
    ggtitle("Grau de Insatisfação do experimento humano") +
    facet_grid(~orgao) 

Como podemos ver há uma distribuição uniforme entre as notas recebidas em cada reclamação e que pertecem ao intervalo de avaliação inicialmente dado, 1 a 5.