Mapa da aula
Aula 18 publicada. Mapa, exemplo, EX052.
flowchart TD
N0["18.1 O que é o perfilamento"]
N1["Laboratório — Completude de cinco campos em 5.000 re"]
N2["18.2 Resultados por campo"]
N3["18.3 Resultados por linha"]
N4["18.4 Das constatações às ações"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX052"]
Desenho lógico
flowchart LR
N0["18.1 O que é o perfilamento"]
N1["Laboratório — Completude de cinco campos em 5.000 re"]
N2["18.2 Resultados por campo"]
N3["18.3 Resultados por linha"]
N4["18.4 Das constatações às ações"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX052"]
[18.1 O que é o perfilamento]
|
v
[Laboratório — Completude de cinco campos em 5.000 re]
|
v
[18.2 Resultados por campo]
|
v
[18.3 Resultados por linha]
|
v
[18.4 Das constatações às ações]
|
v
[Exemplo resolvido] --> [Exercício EX052]
Objetivos de aprendizagem
Você vai (1) perfilar a completude de um conjunto de dados; (2) interpretar os resultados por campo e por linha; (3) transformar as constatações em ações.
18.1 O que é o perfilamento
Perfilar (data profiling) significa examinar os dados para entender seu conteúdo e sua qualidade antes de tomar decisões. Amara perfila o arquivo sintético de membros do programa de fidelidade, contando os valores ausentes em cada campo e quantos registros estão completos em todos os campos. Ela explica que o perfilamento costuma ser o primeiro passo de qualquer trabalho de qualidade, porque mostra onde estão os problemas e qual é seu tamanho, o que ajuda os donos a escolher prioridades com base em evidências, e não em reclamações. Amara explica cada passo do script de perfilamento à curadora dos dados de fidelidade, que vai executá-lo de novo mais tarde.
Laboratório — Completude de cinco campos em 5.000 registros sintéticos de fidelidade
"""Profile completeness of five fields in 5,000 synthetic loyalty records (stdlib only)."""
import random
random.seed(7)
miss = {"member_id": 0.0, "postcode": 0.06, "email": 0.18, "birth_year": 0.31, "store_code": 0.02}
rows = [{f: (None if random.random() < p else "x") for f, p in miss.items()} for _ in range(5000)]
for f in miss:
print(f"{f:<11} complete {100*sum(r[f] is not None for r in rows)/len(rows):5.1f}%")
print(f"rows complete on all fields: {sum(all(v is not None for v in r.values()) for r in rows)}")
Execute com python3 lab_profile.py. Saída verificada:
member_id complete 100.0%
postcode complete 93.9%
email complete 82.3%
birth_year complete 68.6%
store_code complete 98.3%
rows complete on all fields: 2594
18.2 Resultados por campo
O laboratório perfila cinco mil registros. O identificador de membro está completo em todos os registros. O código de loja está completo em 98,3 por cento, o CEP em 93,9 por cento, o e-mail em 82,3 por cento e o ano de nascimento em apenas 68,6 por cento. Amara observa que o padrão faz sentido: os identificadores são gerados pelo sistema, enquanto o e-mail e o ano de nascimento dependem de os membros decidirem informá-los, e o ano de nascimento era opcional nos antigos formulários de adesão. O novo formulário mantém o ano de nascimento opcional, mas o pede com uma explicação curta sobre as ofertas ligadas à idade.
18.3 Resultados por linha
Apenas 2.594 dos 5.000 registros estão completos nos cinco campos, cerca de 51,9 por cento. Amara explica que a completude por linha é menor do que a de qualquer campo isolado, porque as lacunas caem em registros diferentes. Se uma campanha precisa de e-mail, CEP e ano de nascimento ao mesmo tempo, ela só alcança cerca de metade dos membros. Ela enfatiza que os números por campo, sozinhos, enganariam o marketing sobre quantos membros poderiam receber uma oferta direcionada. O marketing revê sua estimativa para a campanha e planeja o direcionamento com o número realista de membros alcançáveis.
18.4 Das constatações às ações
Amara discute os resultados com o dono dos dados de fidelidade. Eles concordam que o ano de nascimento só importa para as ofertas ligadas à idade e não precisa ser buscado para todos. O e-mail importa para os recibos digitais e as ofertas, então o aviso no caixa vai pedi-lo aos membros que não o têm. As lacunas de CEP vêm principalmente de um antigo canal de adesão, que será desativado. Ela registra cada ação com um dono e planeja repetir o perfilamento em três meses para medir a mudança. O dono dos dados de fidelidade aprova as ações no registro de governança.
Exemplo resolvido
Amara perfila 5.000 registros e encontra o identificador de membro completo, o código de loja em 98,3, o CEP em 93,9, o e-mail em 82,3 e o ano de nascimento em 68,6 por cento, com 2.594 linhas completas em todos os campos, e acorda ações direcionadas.
Caso sintético. Os registros são sintéticos; as saídas vêm de lab_profile.py.
Erros e limites
A completude por campo superestima as linhas utilizáveis; informe também a completude por linha.
Exercícios
- EX052 — Campo mais baixo. Que campo é o menos completo?
Mostrar critérios de avaliação
Rubrica: 3 = o ano de nascimento, com 68,6%;; 2 = parcialmente correto;; 1 = outro;; 0 = nenhuma. - EX053 — Linhas completas. Quantos registros estão completos em todos os campos?
Mostrar critérios de avaliação
Rubrica: 3 = 2.594;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma. - EX054 — Ação sobre o ano de nascimento. O que foi decidido sobre o ano de nascimento?
Mostrar critérios de avaliação
Rubrica: 3 = não buscá-lo para todos, pois só é necessário para as ofertas por idade;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.