Cluster chamado "Grupo 3" não convence ninguém. E o k que maximiza uma métrica não é, necessariamente, o k que alguém consegue usar para definir meta. Esta parte é sobre escolher o número de grupos quando nenhuma métrica dá a resposta sozinha.
K-Means de 2 a 10
Mesma matriz de 6 features padronizadas, n_init = 20, semente fixa:
| k | Inércia | Silhueta | Menor cluster | Maior cluster |
|---|---|---|---|---|
| 2 | 5.338,8 | 0,187 | 512 | 603 |
| 3 | 4.439,0 | 0,198 | 316 | 458 |
| 4 | 3.989,6 | 0,199 | 133 | 442 |
| 5 | 3.632,6 | 0,202 | 65 | 414 |
| 6 | 3.366,5 | 0,187 | 62 | 388 |
| 7 | 3.121,7 | 0,170 | 64 | 253 |
| 8 | 2.959,4 | 0,170 | 39 | 231 |
| 9 | 2.817,1 | 0,172 | 31 | 223 |
| 10 | 2.680,9 | 0,163 | 22 | 193 |
O cotovelo geométrico (ponto mais distante da reta entre k = 2 e k = 10) é k = 5, mas k = 4 e k = 6 ficam quase colados. E a silhueta, mesmo no máximo, é baixa. Para saber se 0,202 é "pouco" ou "nada", embaralhei cada coluna da base e rodei de novo: a silhueta sem estrutura fica entre 0,117 e 0,129. A estrutura existe — o ganho é de 0,078 em k = 5 — mas a separação entre os grupos é modesta. Isso vai aparecer de novo como ressalva.
Segunda opinião: Ward
A clusterização hierárquica aponta a faixa de 3 a 7 grupos, com as maiores folgas no corte em 3 (8,95) e em 7 (5,15) — o corte em 5 tem folga pequena (0,66). Ela não reproduz o K-Means (ARI de 0,387 em k = 5) e tem silhueta menor (0,135 contra 0,202). Serviu para confirmar a faixa, não para escolher o ponto. E tem um custo que pesa se a rede crescer: a matriz de distâncias cresce com n² — 0,4 GB para 10 mil pontos, 40 GB para 100 mil.
Os candidatos contra os critérios de negócio
Aqui a escolha deixa de ser geométrica. Cada k foi medido contra os critérios escritos na parte 2: estabilidade em três testes, poder de explicação nas métricas de negócio e tamanho do menor grupo.
| k | Silhueta | ARI semente | ARI reordenação | ARI subamostra 80% | η² da venda |
|---|---|---|---|---|---|
| 3 | 0,198 | 0,992 | 0,990 | 0,925 | 13,6% |
| 4 | 0,199 | 0,984 | 0,984 | 0,911 | 15,9% |
| 5 | 0,202 | 0,992 | 0,990 | 0,888 | 28,3% |
| 6 | 0,187 | 0,949 | 0,951 | 0,737 | 34,8% |
| 8 | 0,170 | 0,655 | 0,671 | 0,672 | 35,5% |
- k = 5 é o maior k que passa nos três testes de estabilidade (ARI ≥ 0,80), e tem a maior silhueta.
- De k = 4 para k = 5, a venda explicada quase dobra: de 15,9% para 28,3%. A venda é a métrica da meta.
- k = 6 e k = 8 explicam mais, mas reprovam na subamostragem. Grupo que muda quando 20% das lojas saem da base não serve para meta anual.
Para confirmar que o modelo salvo não é um mínimo local de sorte: com n_init = 500, a inércia cai de 3.632,6 para 3.632,5 e só 2 lojas mudam de grupo (ARI 0,997).
De centroides a nomes
O nome de cada grupo sai das 2–3 features mais distantes da rede, lidas no centroide em desvios-padrão:
| Feature (z) | C0 | C1 | C2 | C3 | C4 |
|---|---|---|---|---|---|
| Venda média/dia | −0,56 | 0,14 | −0,26 | −0,37 | 1,02 |
| Ticket médio | −0,59 | 0,84 | −0,72 | 0,12 | −0,84 |
| Efeito da promoção | 0,26 | −0,34 | −0,54 | 1,54 | −0,87 |
| Volatilidade | 0,08 | −0,35 | 0,70 | 1,56 | −1,02 |
| Sazonalidade | −0,28 | 0,04 | 2,44 | 0,09 | −0,60 |
| Distância ao concorrente | −0,70 | 0,62 | 0,21 | 0,40 | −0,73 |
O maior grupo (Destino de cesta grande, 37,1% da rede) é o mais coeso: silhueta de 0,278 e nenhuma loja com silhueta negativa. O menor (Sazonal, 65 lojas) é definido por uma única dimensão, +2,44 desvios de sazonalidade, e é o menos coeso: 33,8% das lojas dele estão mais perto de outro centroide. Ele é estável, mas frágil — e vai pesar na regra de classificação de lojas novas, na parte 8.
O teste de sanidade da escolha: se dois grupos recebem a mesma meta, a mesma política promocional e a mesma lógica de supply, eles não deveriam estar separados. Posso ter oito grupos estatisticamente distintos; se só existem cinco decisões diferentes, a segmentação tem cinco.
Parte 5 de 9 da série 1.115 lojas, 1 régua injusta. O mapa completo da série reúne todas as partes, os cinco grupos e os números finais. O código, os notebooks e a documentação estão no repositório no GitHub ↗.