"Ajusta-se o modelo sobre
Xey, comXde forma(n, p)eyde forma(n,)."
Tradução integral: treina-se o modelo sobre uma tabela de variáveis explicativas de n linhas e p colunas, e sobre uma coluna de n respostas, a i-ésima resposta correspondendo à i-ésima linha. Essa convenção não é estilística: ela é tipada, a caixa da letra carregando uma informação sobre a natureza matemática do objeto.
| Objeto matemático | Tipografia convencional | Exemplo | Número de dimensões |
|---|---|---|---|
| Escalar | Minúscula itálica, ou letra grega | n, p, α | 0 |
| Vetor | Minúscula, frequentemente em negrito | y, x, β | 1 |
| Matriz | Maiúscula | X, A, Σ | 2 |
Essa disciplina de notação, várias décadas anterior ao Machine Learning, é atribuída a Alston Householder (Principles of Numerical Analysis, 1953) e depois adotada pela literatura de álgebra linear numérica.
Consequência direta: X é maiúscula porque é uma matriz
(observações e variáveis); y é minúscula porque é um vetor
(um valor por observação).
A segunda fonte da convenção é a formulação matricial do modelo linear, padrão em estatística:
y = X β + ε , com estimador de mínimos quadrados β̂ = (Xᵀ X)⁻¹ Xᵀ y
Argumento de coerência dimensional: Xᵀ X só tem sentido se X é uma
matriz, e Xᵀ y só se y é um vetor de comprimento igual ao número de linhas
de X. A notação condiciona a legibilidade das fórmulas da área.
Definição rigorosa
Seja um conjunto de dados de n observações descritas por p variáveis explicativas. A matriz das variáveis explicativas X é o elemento de cujo termo é o valor assumido pela j-ésima variável explicativa na i-ésima observação. A i-ésima linha de X, notada , é o vetor de características (feature vector) da observação i. Sinônimos: matriz de planejamento (design matrix), matriz dos preditores, feature matrix.
Tradução em linguagem corrente: a tabela das informações fornecidas ao modelo, sem a coluna a prever e sem as colunas sem papel explicativo.
Ponto de atenção: X não contém nem o alvo, nem os identificadores, nem as colunas de rastreabilidade; toda coluna mantida será usada pelo algoritmo, inclusive um identificador correlacionado por acidente com o alvo (capítulos 005 e 028).
Definição rigorosa
O vetor-alvo y é o elemento de em regressão, ou de em classificação, onde 𝒞 é o conjunto finito das classes, cuja i-ésima componente é o valor da variável-alvo observado para a i-ésima observação. A correspondência é posicional: é a resposta associada à linha de X. Sinônimos: vetor-resposta, variável dependente, target, labels.
Tradução em linguagem corrente: a coluna das respostas corretas, na ordem das linhas da tabela.
Ponto de atenção: y é um objeto de uma dimensão, de forma (n,) e
não (n, 1) — distinção sem efeito em matemática, mas real em código
(seção 2.3).
df = pd.read_csv("transactions.csv")
CIBLE, HORS_MODELE = "statut", ["transaction_id", "date_operation"]
X = df.drop(columns=[CIBLE] + HORS_MODELE)
y = df[CIBLE]Interpretação: X é construído por subtração, jamais por enumeração das colunas mantidas; uma coluna adicionada a montante entra, portanto, automaticamente no modelo, o que impõe uma revisão explícita do esquema.
Variantes e notação incorreta: Y maiúsculo é justificado para um alvo
multissaída, de forma (n, t), e incorreto para um alvo único. Uma parte
da literatura de redes neurais coloca as observações em colunas,
com X de forma (p, n): variante coerente internamente, mas incompatível
com a interface do scikit-learn, que exige as observações em linhas.
| Símbolo | Nome | Equivalente scikit-learn | O que conta |
|---|---|---|---|
| n | Número de observações | n_samples | As linhas de X, o comprimento de y |
| p | Número de variáveis explicativas | n_features | As colunas de X |
| k | Número de classes | n_classes | As modalidades distintas de y |
Algumas referências notam d o número de variáveis e m o de observações: a letra pouco importa, a posição importa, o primeiro eixo sendo o das observações.
A igualdade dos comprimentos é verificada automaticamente pelo scikit-learn. A correspondência linha a linha não é verificável por nenhuma biblioteca: é uma propriedade do código que produziu X e y.
Lembrete de vocabulário: a forma (shape) é a tupla dos tamanhos dos
eixos. (n,) e (n, 1) contêm o mesmo número de valores, mas não o mesmo
posto — vetor de um lado, matriz de uma coluna do outro.
print("X :", X.shape)
print("y :", y.shape)
print("y ndim :", y.ndim)
print("comprimentos iguais :", X.shape[0] == y.shape[0])X : (120000, 14)
y : (120000,)
y ndim : 1
comprimentos iguais : TrueInterpretação: 120 000 observações descritas por 14 variáveis e 120 000
valores-alvo; o posto 1 de y confirma que se trata de um vetor. De custo
nulo, a verificação se repete após cada filtragem.
y_correct = df["statut"] # Series pandas -> forma (120000,) ndim 1
y_faux = df[["statut"]] # DataFrame -> forma (120000, 1) ndim 2Passado a um estimador, o segundo dispara o aviso a seguir, que não interrompe a execução e se repete a cada iteração de validação:
DataConversionWarning: A column-vector y was passed when a 1d array was
expected. Please change the shape of y to (n_samples,), for example using
ravel().Correção: df["statut"] ou df[["statut"]].to_numpy().ravel().
O cenário mais difundido consiste em filtrar X depois de ter extraído y.
X = df.drop(columns=["transaction_id", "date_operation", "statut"])
y = df["statut"]
X = X.dropna() # 2 570 linhas retiradas de X, nenhuma de y
RandomForestClassifier().fit(X, y)ValueError: Found input variables with inconsistent numbers of samples:
[117430, 120000]Interpretação: o erro é benigno porque é barulhento — o controle de coerência interrompe a execução antes de qualquer aprendizado. A forma correta filtra a tabela de origem antes da separação.
O caso perigoso é o desalinhamento silencioso: os comprimentos são preservados, mas a ordem das linhas diverge.
X = df.drop(columns=["transaction_id", "date_operation", "statut"])
X = X.sort_values("montant") # reordenação apenas de X
y = df["statut"]
print(X.shape[0] == y.shape[0])
print(cross_val_score(RandomForestClassifier(), X, y, cv=5,
scoring="roc_auc").mean().round(3))True
0.501Interpretação: nenhuma exceção é levantada. Os estimadores convertem os objetos pandas em arrays NumPy e ignoram o índice: a correspondência é perdida sem sinal, e o modelo aprende uma associação entre transações e os rótulos de outras transações. Um ROC-AUC de 0,501 em um problema reputado previsível é a assinatura de um desalinhamento, não a de um algoritmo ruim.
Salvaguarda: o índice é então a única testemunha da correspondência —
assert X.index.equals(y.index). Uma filtragem levanta uma exceção, logo permanece
benigna; sort_values(), sample(frac=1) e um reset_index(drop=True)
unilateral são silenciosos, logo críticos.
Label traduz-se por rótulo; os dois termos são equivalentes e coexistem nos meios lusófonos, assim como rotular, anotar e o anglicismo labelizar.
Definição rigorosa
Valor da variável-alvo associado a uma observação em um conjunto de dados de aprendizado supervisionado, tido como a resposta de referência dessa observação. O conjunto ordenado dos rótulos constitui o vetor-alvo y.
Tradução em linguagem corrente: a resposta correta, já conhecida, anexada a uma linha da tabela.
Alcance do termo: no sentido estrito, um rótulo é um valor categórico que nomeia a categoria de pertencimento da observação. Em classificação, um rótulo é uma classe; em regressão, o valor associado é um valor-alvo numérico e não um rótulo no sentido estrito, mesmo que o uso profissional estenda a palavra às duas situações.
Ponto de atenção: um rótulo não é uma verdade absoluta, mas um valor registrado, que pode estar errado ou refletir a decisão de um operador falível. A verdade de campo (ground truth), conjunto dos valores de referência que servem para julgar o modelo, não é, portanto, a realidade, mas sua medida disponível: um conjunto de fraude contém as fraudes detectadas, as demais carregando o rótulo "Normal".
| Critério | Classificação | Regressão |
|---|---|---|
| Natureza de | Categoria | Número real |
| Termo rigoroso | Rótulo de classe (class label) | Valor-alvo, valor-resposta |
| Conjunto de chegada | Conjunto finito 𝒞, de cardinal k | ℝ ou um intervalo de ℝ |
| Diferença entre dois valores | Não definida | Definida e interpretável |
| Exemplo | statut ∈ {Fraude, Normal} | montant_sinistre = 4 380,50 $ |
Ponto de atenção: a distinção não se lê no tipo computacional
da coluna — um alvo codificado 0 e 1 é numérico no sentido do pandas e
categórico no sentido estatístico. O critério é a natureza do fenômeno
medido (capítulo 010).
Qualidade da rotulagem: entre o fenômeno e o valor inscrito em y interpõem-se uma detecção e um registro, ambos falíveis. Quando vários operadores anotam as mesmas observações, sua taxa de desacordo limita o desempenho atingível; o kappa (Cohen, 1960) mede essa concordância corrigindo o efeito do acaso.
Definição rigorosa
Modalidade da variável-alvo de um problema de classificação. O conjunto das k classes forma uma partição do espaço das observações: toda observação pertence a uma classe e a uma só; as classes são, portanto, mutuamente exclusivas e coletivamente exaustivas.
Tradução em linguagem corrente: uma das categorias possíveis da resposta, e uma só por linha.
Cardinal: k = 2 em classificação binária, k > 2 em multiclasse; a classificação multirrótulo levanta a hipótese de exclusividade (capítulo 011).
Ponto de atenção: uma classe é uma modalidade do alvo; as modalidades de uma variável explicativa são categorias (capítulo 022).
A maioria dos estimadores manipula rótulos numéricos. A conversão é mecânica, mas carrega uma decisão implícita: qual classe recebe 1.
from sklearn.preprocessing import LabelEncoder
encodeur = LabelEncoder().fit(df["statut"])
print(dict(zip(encodeur.classes_, encodeur.transform(encodeur.classes_)))){'Fraude': 0, 'Normal': 1}Interpretação: LabelEncoder ordena as modalidades por ordem
lexicográfica. Como "Fraude" precede "Normal" no alfabeto, a fraude
recebe o código 0 e o comportamento normal o código 1; como as métricas adotam
pos_label=1 por padrão, a classe positiva torna-se "Normal" — o inverso da
intenção de negócio, sem nenhum aviso.
Forma recomendada: explicitar a codificação em vez de sofrê-la.
y = (df["statut"] == "Fraude").astype(int)
print(y.value_counts())statut
0 119652
1 348
Name: count, dtype: int64Interpretação: o código 1 designa a fraude por construção e não por acidente alfabético, e uma linha de código documenta a decisão.
| Convenção | Conteúdo | Contexto |
|---|---|---|
| 0 / 1 | 0 = ausência do fenômeno, 1 = presença | Padrão em classificação binária |
| Ordem lexicográfica | As modalidades são ordenadas e depois numeradas | Comportamento padrão do scikit-learn |
classes_ | Atributo que expõe a ordem adotada pelo estimador | A consultar sistematicamente |
Ponto de atenção sobre predict_proba: a matriz devolvida contém uma
coluna por classe, ordenadas segundo estimateur.classes_. Com classes_ igual
a [0 1] e 1 designando a fraude, predict_proba(X_test)[:, 1] carrega de fato a
probabilidade de fraude; com rótulos textuais não recodificados, ela
carregaria a de ser normal, produzindo um ROC-AUC inferior a 0,5 sem
que nenhum erro seja levantado.
Definição rigorosa
Em um problema de classificação binária, a classe positiva é a modalidade da variável-alvo designada como evento de interesse; ela serve de referência ao cálculo das quantidades TP, FP, FN e TN e de todas as métricas assimétricas que delas derivam, a classe negativa sendo a modalidade complementar. O vocabulário é emprestado do diagnóstico médico, onde um teste "positivo" sinaliza a presença da condição procurada.
Tradução em linguagem corrente: a classe positiva é o que se busca detectar.
Ponto de atenção: "positivo" não é "favorável". Em um modelo de triagem, a classe positiva é "acometido"; em um modelo de cancelamento, "cancela". O termo é descritivo, não avaliativo.
Um paciente cujo teste dá positivo não recebeu uma boa notícia. O laboratório não expressou um julgamento de valor: ele sinalizou que a substância procurada foi detectada.
Um teste concebido para detectar uma doença é calibrado sobre a doença: ninguém pergunta "qual é a sensibilidade deste teste para a boa saúde". A classe positiva de um modelo obedece à mesma lógica — é a substância procurada.
Os três critérios convergem quase sempre: o que a organização busca detectar é também o que é raro e aquilo cujo esquecimento custa caro. Em caso de divergência, o primeiro prevalece, por ser de negócio.
| Caso de uso | Classe positiva | Classe negativa | Ação desencadeada |
|---|---|---|---|
| Detecção de fraude | Fraude | Normal | Bloqueio ou revisão manual |
| Triagem médica | Acometido | Saudável | Exame complementar |
| Cancelamento de cliente | Cancela | Permanece | Oferta de retenção |
| Manutenção preditiva | Pane em 30 dias | Funcionamento nominal | Intervenção preventiva |
Seja um modelo avaliado sobre 24 000 transações, das quais 70 fraudes, fraude designada positiva:
| Previsto Normal | Previsto Fraude | |
|---|---|---|
| Real Normal | TN = 23 620 | FP = 310 |
| Real Fraude | FN = 28 | TP = 42 |
for nom, val in [("Accuracy", accuracy_score(y_test, y_pred)),
("Precision fraude", precision_score(y_test, y_pred, pos_label=1)),
("Recall fraude", recall_score(y_test, y_pred, pos_label=1)),
("F1 fraude", f1_score(y_test, y_pred, pos_label=1)),
("F1 normal", f1_score(y_test, y_pred, pos_label=0))]:
print(f"{nom:<17}: {val:.4f}")Accuracy : 0.9859
Precision fraude : 0.1193
Recall fraude : 0.6000
F1 fraude : 0.1990
F1 normal : 0.9929Interpretação: o mesmo modelo, sobre as mesmas previsões, exibe um F1-score de 0,199 ou de 0,993 conforme a classe designada positiva: detector medíocre de um lado, sistema excelente em aparência que deixa passar 40 % das fraudes do outro.
| Métrica | Comportamento na inversão da classe positiva |
|---|---|
| Accuracy, Balanced Accuracy, Log Loss, coeficiente de Matthews | Invariantes |
| Precision, Recall | Tornam-se respectivamente o valor preditivo negativo e a especificidade da antiga designação |
| F1-score, PR-AUC | Mudam, radicalmente em caso de desbalanceamento |
| ROC-AUC | Inalterada se o score empregado é o da nova classe positiva; torna-se 1 − AUC senão |
Essas métricas são definidas uma a uma nos capítulos 052 a 065; o que deve ser
adquirido aqui é sua dependência em relação à classe de referência. A designação
governa também a leitura da matriz de confusão, onde a troca dos papéis
transforma um falso negativo em falso positivo (capítulo 052), o sentido de
deslocamento do limiar (capítulo 062) e a classe que class_weight
e a sobreamostragem reforçam (capítulo 051).
| Erro clássico | Manifestação | Correção |
|---|---|---|
| Deixar a ordem alfabética decidir | "Fraude" codificada 0 pelo LabelEncoder | Codificar explicitamente a classe de interesse como 1 |
| Confundir positivo e favorável | "Cliente fiel" designado positivo em um modelo de cancelamento | Positivo = evento procurado |
| Designar a classe majoritária | Métricas lisonjeiras e inexploráveis | Designar o evento raro a detectar |
Omitir pos_label com rótulos textuais | ValueError: pos_label=1 is not a valid label | Passar pos_label="Fraude" ou recodificar em 0/1 |
Ler confusion_matrix().ravel() sem verificar a ordem | TN, FP, FN, TP invertidos | Fixar labels= e controlar classes_ |
Recomendação: a designação pertence ao enquadramento do problema, tanto quanto a unidade de análise: fechada com o negócio, escrita em claro, materializada por uma única expressão explícita.
Definição rigorosa
A classe majoritária é aquela cujo efetivo é o mais elevado no conjunto considerado, a classe minoritária aquela cujo efetivo é o mais baixo; em multiclasse, a qualificação se estende por ordem decrescente dos efetivos. A prevalência da classe positiva é a proporção de observações dessa classe, π = n₁ / n; a razão de desbalanceamento (imbalance ratio) é o quociente IR = / .
Tradução em linguagem corrente: a classe mais frequente e a mais rara; a porcentagem de casos positivos e o número de negativos para um positivo.
Ponto de atenção: essas qualificações são empíricas; elas descrevem a composição de uma amostra, não uma propriedade do fenômeno. Um conjunto reamostrado pode apresentar efetivos iguais enquanto o fenômeno permanece raro na população, razão pela qual o conjunto de teste jamais deve ser rebalanceado (capítulo 051).
Segundo ponto de atenção: o que limita o aprendizado não é apenas a razão, mas o efetivo absoluto da classe minoritária. Uma razão de 100:1 com 5 000 positivos é explorável; a mesma razão com 30 positivos não é, qualquer que seja a técnica empregada.
effectifs = df["statut"].value_counts()
print(effectifs)
print("Prevalência :", round(effectifs["Fraude"] / effectifs.sum(), 5))
print("Razão de desbalanceamento :", round(effectifs.max() / effectifs.min(), 1), ": 1")statut
Normal 119652
Fraude 348
Name: count, dtype: int64
Prevalência : 0.0029
Razão de desbalanceamento : 343.8 : 1Interpretação: a majoritária é "Normal" com 99,71 % das observações, a minoritária "Fraude" com 0,29 %, ou seja, quase 344 transações normais para uma transação fraudulenta. O efetivo absoluto de 348 fraudes é baixo: após uma divisão 80/20, o teste conterá apenas cerca de 70, o que torna toda métrica calculada sobre essa classe instável e impõe uma divisão estratificada (capítulo 027).
Recomendação: value_counts() sobre o alvo é o primeiro comando
executado após o carregamento de um conjunto de classificação; ele condiciona a
escolha das métricas, a estratégia de divisão e o tratamento do desbalanceamento.
As prevalências vão de 15 % a 30 % em cancelamento de telecom a menos de 0,1 % em
detecção de intrusão: o desbalanceamento é a situação normal.
A configuração dominante associa positiva e minoritária, mas um controle de qualidade em que 92 % das peças são conformes e em que se certifica a conformidade designa legitimamente a majoritária como positiva. Após rebalanceamento, a positiva não é mais minoritária no treino, mas continua sendo no teste.
modele_nul = DummyClassifier(strategy="most_frequent").fit(X_train, y_train)
y_nul = modele_nul.predict(X_test)
print("Accuracy :", round(accuracy_score(y_test, y_nul), 4))
print("Recall fraude :", round(recall_score(y_test, y_nul, pos_label=1), 4))Accuracy : 0.9971
Recall fraude : 0.0Interpretação: um modelo que prevê sistematicamente "Normal" atinge 99,71 % de accuracy e não detecta nenhuma fraude — perfeitamente inútil e perfeitamente bem avaliado. É a razão pela qual a accuracy é descartada assim que o desbalanceamento é marcado. Tal modelo constitui a baseline obrigatória do projeto: um modelo que não a supera não aprendeu nada (capítulos 050 e 051).
X.shape[0] == y.shape[0] é uma condição necessária, jamais suficiente: uma
ordenação, um embaralhamento ou uma reindexação aplicados a apenas um dos dois objetos
preservam os comprimentos e destroem a correspondência, em silêncio.
Formulação correta: "O invariante a preservar é a correspondência posicional: a linha i de X e o valor descrevem a mesma observação. Toda filtragem ou ordenação aplica-se à tabela de origem, antes da separação."
LabelEncoder ordena as modalidades por ordem lexicográfica: com "Fraude" e
"Normal", a fraude recebe o código 0 e as métricas, que adotam
pos_label=1 por padrão, medem então a classe "Normal".
Formulação correta: "A classe positiva é declarada explicitamente, por
exemplo y = (df["statut"] == "Fraude").astype(int), e é verificada lendo
classes_ após o ajuste."
"Positivo" significa "presença da condição procurada": o termo é descritivo e não avaliativo. A classe positiva de um modelo de triagem é "acometido", a de um modelo de cancelamento "cancela".
Formulação correta: "A classe positiva é o evento que o modelo tem por missão detectar, independentemente de seu caráter desejável."
Precision, recall, F1-score e PR-AUC são assimétricas: sobre o mesmo modelo, o F1-score vale 0,199 para a fraude e 0,993 para o comportamento normal.
Formulação correta: "O F1-score sobre a classe Fraude é de 0,199", e jamais "o F1-score do modelo é de 0,199".
A classe positiva resulta de uma decisão metodológica, a classe minoritária de uma contagem; sua coincidência é um fato empírico. Após rebalanceamento, a classe positiva não é mais minoritária no treino, mas continua sendo no teste.
Formulação correta: "A classe positiva é designada, a classe minoritária é constatada."
NOTAÇÃO
X matriz das variáveis explicativas forma (n, p) MAIÚSCULA
y vetor-alvo forma (n,) minúscula
Origem : tipografia da álgebra linear
matriz = maiúscula, vetor = minúscula, escalar = itálico
INVARIANTE DE ALINHAMENTO
Necessário : X.shape[0] == y.shape[0]
Suficiente : a linha i de X e y_i descrevem a MESMA observação
O desalinhamento silencioso não levanta nenhuma exceção.
RÓTULO E CLASSE
Rótulo : valor da variável-alvo para uma observação.
classificação = rótulo de classe, categórico
regressão = valor-alvo, numérico
Classe : modalidade do alvo ; as classes formam uma partição,
exclusivas e exaustivas.
A verdade de campo é uma medida, não a realidade.
CLASSE POSITIVA
DESIGNADA, não constatada.
Critério : o evento que se busca detectar
e que desencadeia uma ação.
Positivo = presença do fenômeno, jamais "favorável".
Ela determina precision, recall, F1, PR-AUC
e a leitura da matriz de confusão.
CLASSE MAJORITÁRIA / MINORITÁRIA
CONSTATADAS por contagem : value_counts()
Prevalência = n_positivos / n Razão = n_maj / n_min
O efetivo ABSOLUTO da minoritária conta tanto quanto a razão.Enunciado de síntese
Xé maiúscula porque é uma matriz de forma (n, p) eyminúscula porque é um vetor de forma (n,), sua correspondência sendo posicional e não garantida pela simples igualdade de seus comprimentos; um rótulo é o valor da variável-alvo registrado para uma observação, uma classe é uma modalidade dessa variável, e a classe positiva é aquela que a organização busca detectar — designação metodológica, distinta da constatação de minoria, da qual dependem a matriz de confusão e todas as métricas assimétricas.
Quizzes associados
007.1-quiz-notation-x-y.md007.2-quiz-dimensions-alignement.md007.3-quiz-etiquette-label.md007.4-quiz-classe-encodage.md007.5-quiz-classe-positive.md007.6-quiz-classes-majoritaire-minoritaire.mdPróximo capítulo: 008-algorithme-vs-modele.md