- Introdução a como implementar controle estatístico de processos (SPC) em Python para identificar a variação temporal da qualidade do produto e os momentos de intervenção
- Uso de
pandas, plotnine e scipy para processamento de dados, visualização e cálculos estatísticos
- Com dados de águas termais da província de Kagoshima, no Japão, análise de temperatura, pH e teor de enxofre como indicadores de controle de qualidade
- Uso de estatísticas de subgrupos e cartas de controle (X-bar, S e amplitude móvel) para avaliar a estabilidade do processo e detectar outliers
- Apresentação de um procedimento para diagnosticar visualmente o estado do processo e apoiar decisões de melhoria com base em dados
Visão geral do controle estatístico de processos com Python
- O controle estatístico de processos (SPC) é uma abordagem estatística para medir a variação da qualidade do produto e decidir quando intervir
- Em Python,
plotnine é usado para visualização, pandas para manipulação de dados e scipy para cálculos estatísticos
- Na prática, os conceitos de SPC são aplicados a um caso de controle de qualidade de água termal
- Temperatura, pH e teor de enxofre são definidos como os principais indicadores de qualidade da fonte termal
Pacotes e funções definidas pelo usuário
- Pacotes necessários:
pandas, plotnine, scipy
- As funções definidas pelo usuário são importadas do diretório
functions/ no repositório do GitHub
functions_distributions.py: funções de confiabilidade e distribuições
functions_process_control.py: funções para controle de processos
- O diretório de funções é adicionado ao caminho do Python com
sys.path.append('functions'), e depois as funções são importadas
Caso: controle de qualidade de águas termais no Japão
- As águas termais japonesas (onsen) são um recurso turístico central para a economia regional, e temperatura, pH e teor de enxofre são critérios de qualidade
- Critério de temperatura: Extra Hot(>42°C), Hot(41~34°C), Warm(33~25°C)
- Critério de pH: Acidic(pH<3) ~ Alkaline(pH>8.5)
- Critério de enxofre: classificado como fonte termal sulfurosa quando há 1mg/kg ou mais
- Os dados de águas termais da província de Kagoshima são amostrados 20 vezes por mês ao longo de 15 meses para analisar a variação da qualidade
Carregamento dos dados e estatísticas básicas
- O arquivo
onsen.csv é carregado para verificar os dados de temperatura, pH e teor de enxofre
- A função
describe() é usada para calcular a média (mean) e o desvio padrão (sd)
- Exemplo de resultado: média de 44.85°C, desvio padrão de 1.99°C
- Esses valores estatísticos são indicadores básicos para entender o centro e a variabilidade do processo
Visualização geral do processo
- Com
plotnine, a distribuição da temperatura ao longo do tempo é visualizada com boxplots e distribuição de pontos
- A linha central mostra a média geral, permitindo comparar a distribuição em cada momento
- Um histograma exibe a distribuição total da temperatura para verificar o centro do processo e a amplitude da variação
Cálculo das estatísticas de subgrupos
- Cada ponto no tempo (
time) é agrupado como um subgrupo para calcular média (xbar), amplitude (r) e desvio padrão (sd)
- Exemplo: média do primeiro grupo de 44.635°C, amplitude de 4.2°C
- σₛ (desvio padrão dentro do subgrupo) e o erro padrão (se) são calculados para definir os limites superior e inferior (±3σ)
- Isso permite avaliar a estabilidade temporal do processo
Estatísticas do processo como um todo
- Integrando todos os grupos, são calculados média global (xbbar), amplitude média (rbar) e desvio padrão médio (sdbar)
- Exemplo: xbbar 44.85, rbar 7.26, sdbar 1.94
- A comparação com σₜ (desvio padrão total) permite entender a variabilidade dentro e entre os processos
Cartas de controle (X-bar e S)
- Carta X-bar: exibe as médias de cada subgrupo no eixo do tempo
- Linha central: média global; limites superior e inferior: ±3σ
- A área sombreada representa a faixa dos limites de controle
- Se houver pontos fora dos limites de controle ou padrões não aleatórios, há possibilidade de anomalias no processo
Verificação do aprendizado: visualização do processo de pH
- Com a mesma função
ggprocess(), é gerado um gráfico de visão geral do processo para os dados de pH
- A linha da média e as distribuições por momento são comparadas visualmente
Carta de amplitude móvel (n=1)
- Quando há apenas medições individuais, usa-se a amplitude móvel (Moving Range)
- A diferença absoluta entre medições consecutivas é calculada para estimar a variabilidade
- São calculados a amplitude móvel média (
mrbar), o limite superior (upper) e o limite inferior (lower=0)
- A carta de amplitude móvel é útil para monitorar a variação do processo com base em dados individuais
Conclusão
- Com Python, é possível gerar visão geral do processo, estatísticas de subgrupos e carta de amplitude móvel
- As ferramentas de SPC permitem diagnosticar visualmente a estabilidade do processo e a presença de anomalias
- Esse tipo de análise pode ser aplicado à melhoria da qualidade e à tomada de decisão com base em dados
1 comentários
Comentários no Hacker News
Isso me lembrou de um projeto antigo
Conseguimos substituir milhares de detectores complexos de anomalia em séries temporais baseados em deep learning em uma empresa FANG por modelos de controle estatístico de processo (não paramétricos e semiparamétricos)
Os novos modelos tinham de 3 a 4 ordens de magnitude menos parâmetros de treinamento e eram simples o bastante para que uma equipe de 3 a 4 pessoas gerenciasse milhares de fluxos
Os modelos de deep learning eram opacos para depuração e interpretação, então eram difíceis demais de manter
Para equipes pequenas, eu ainda recomendo fortemente uma abordagem baseada em estatística
Dito isso, por motivos políticos, esse tipo de escolha talvez não seja bom para a carreira. Quem fez apostas enormes não gosta quando aparecem evidências contrárias
É por isso que sou cético em relação ao atual clima de euforia com IA
Em muitos casos, os métodos clássicos existentes são muito mais estáveis e eficientes, então não entendo por que as empresas insistem em escolher métodos complexos e instáveis
A empresa exibiu modelos de ML impressionantes para conferências, mas os operadores reais reclamavam muito da falta de precisão e interpretabilidade
Então reescrevi o código com base em regras matemáticas simples que os operadores realmente usavam, e obtive resultados muito melhores
Funciona bem para OCR, mas é menos eficaz em tarefas de classificação
Muitas vezes, focar em boa iluminação e em técnicas tradicionais de visão computacional produz resultados melhores
Também me identifico com a questão política da adoção de tecnologia. Por isso, costumo propor uma abordagem híbrida que combina deep learning com visão tradicional
Parece que a maioria dos parâmetros é instável ou correlacionada entre si
Antigamente tirei a certificação Lean Six Sigma Green Belt e fiz um projeto de controle estatístico de processo com Minitab para processos de back office de banco de investimento
Hoje em dia parece que ninguém mais se lembra do Minitab. Todo mundo só usa Python
Ele ainda é atualizado e também tem interface com Python → mtbpy package
As ferramentas open source só iam até x-bar/S/R, e faltavam recursos avançados como análise multivariada
Escrevi um guia prático para iniciantes em SPC alguns anos atrás
Pode ser útil → Statistical Process Control: A Practitioner’s Guide
Em conjuntos de dados pequenos, como dados clínicos, a estatística clássica continua sendo essencial
É difícil coletar e harmonizar metadados, e em pesquisas sobre doenças raras muitas vezes até machine learning ou regressão se tornam inviáveis
Dados do mundo real nunca são limpos
A maior parte do tempo é gasta em controle de qualidade dos dados
Outliers podem vir de erro de medição ou de mudança no processo, e para entender isso é preciso ter intuição sobre o próprio processo
Por isso, ferramentas maduras que permitam visualização e exploração rápidas são importantes
Criar manualmente em código um gráfico SPC Cpk é ineficiente
SPC é realmente uma ferramenta excelente
É muito mais simples e funciona muito melhor do que outros conjuntos de ferramentas mais complexos
Tem muitos erros de digitação
Gosto muito do design e da atmosfera da página