Questão nº 62

Questão de Análise de Dados · FGV TCU 2021 (nº 62)

FGV2021Auditor Federal de Controle Externo - Área Controle Externo (AUFC-CE)Análise de Dados
Gabarito: Dver comentário ↓

Natasha, uma cientista de dados, está trabalhando com um conjunto de dados sobre carros para fazer um modelo preditivo para uma companhia de seguros. A primeira versão do modelo utiliza apenas informações básicas sobre os carros: a marca e a cor.
Como esses dados são categóricos, Natasha faz um pré-processamento usando a biblioteca scikit-learn. Em um ambiente interativo, ela executa os comandos a seguir.

```
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> X = [['Toyota', 'vermelho'], ['Toyota', 'verde'], ['BMW', 'vermelho']]
>>> enc.fit(X)
>>> enc.get_feature_names()
array(['x0_BMW', 'x0_Toyota', 'x1_verde', 'x1_vermelho'], dtype=object)
>>> X_prime = enc.transform(X).toarray()
>>> X_prime
array([[0., 1., 0., 1.], [0., 1., 1., 0.], [1., 0., 0., 1.]])
```

Para contar o número de carros da marca Toyota no conjunto de dados, obtendo corretamente o resultado 2, Natasha pode usar a seguinte linha de código:

Resposta comentada

Gabarito Alternativa D

One-Hot Encoding é uma técnica de pré-processamento que transforma dados categóricos (como nomes de marcas ou cores) em um formato numérico binário (0s e 1s) que modelos de machine learning podem processar. Para cada categoria única em uma coluna original, uma nova coluna é criada, e um '1' indica a presença daquela categoria, enquanto um '0' indica sua ausência.

  • (A) Incorreta: A condição i == 'Toyota' compara uma lista (uma linha de X, por exemplo ['Toyota', 'vermelho']) com uma string ('Toyota'), o que sempre resultará em False. Portanto, a lista resultante será vazia e len() retornará 0.
  • (B) Incorreta: A coluna de índice 0 em X_prime corresponde à categoria x0_BMW (BMW), conforme definido por enc.get_feature_names(). Assim, i[0] == 1 contaria os carros da marca BMW, não Toyota.
  • (C) Incorreta: Embora a list comprehension [i for i in X if 'Toyota' in i] identifique corretamente as linhas que contêm 'Toyota', a função sum() não pode ser aplicada diretamente a uma lista de listas (como [['Toyota', 'vermelho'], ['Toyota', 'verde']]) para contar elementos. Ela resultaria em um erro (TypeError) ou não produziria o resultado desejado. A armadilha aqui é que a lógica de filtragem está correta, mas a função de agregação (sum()) é usada de forma inadequada para contar.
  • (D) Correta: Quando a função sum() embutida do Python é aplicada a um array NumPy bidimensional (como X_prime), ela realiza uma soma elemento a elemento ao longo do primeiro eixo (ou seja, soma as linhas). O resultado é um novo array onde cada elemento é a soma dos valores da respectiva coluna. No caso de X_prime, sum(X_prime) resultaria em [1., 2., 1., 2.]. Este array representa a contagem de cada categoria na ordem em que aparecem em enc.get_feature_names(): [count(BMW), count(Toyota), count(verde), count(vermelho)]. Como 'Toyota' corresponde ao índice 1, sum(X_prime)[1] retorna 2, que é a contagem correta de carros Toyota.
  • (E) Incorreta: X_prime[:,0] seleciona todos os elementos da primeira coluna de X_prime. Conforme enc.get_feature_names(), a primeira coluna (x0_BMW) representa a marca BMW. Assim, sum(X_prime[:,0]) contaria os carros da marca BMW, não Toyota.

Fonte: FGV TCU 2021 Auditor Federal de Controle Externo - Área Controle Externo (AUFC-CE) (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho