Lições aprendidas na carreira de Data Science

Seguem 5 lições aprendidas, baseadas em um bate-papo que fiz, com alunos de data science da VAI Academy.

  1. Humildade, dados não são só dados.
  2. Simplicidade
  3. Importância de aliados
  4. Caminho que gosta, tem habilidade e relevância no mercado
  5. Tentar gerar valor de verdade

Itens detalhados a seguir.

Dados nunca são só dados

Não é só pegar a base de informações e trabalhar sobre ela.

Sempre existe um processo, que roda no mundo real e produz algo de verdade. Seja a fabricação de algum produto, seja a execução de algum serviço. O analista deve entender minimamente o processo, o que aqueles dados significam. A gente não consegue fazer isso sozinho. Devemos contar com o apoio de quem roda o trabalho no dia-a-dia, pessoas operacionais.

A abordagem de entrar a fundo no processo dá trabalho, é muita quebração de pedra até chegarmos numa formulação correta. É necessário ouvir mais do que falar.

Uma postura arrogante, do tipo “sou engenheiro de machine learning e isso não é comigo”, não vai resolver o problema na vida real. É tipo querer ficar só com o filé mignon e deixar os colegas com os ossos. Até porque a solução pode vir de algumas formas, muitas vezes é possível melhorar o processo com solução simples – uma planilha Excel que nem precisa de nada avançado.

Sempre brinco, dizendo que o trabalho analítico em cima de dados é quase uma desculpa para entrar no processo e melhorá-lo. Não importa se utilizamos redes neurais profundas ou algum algoritmo simples. O que importa é gerar resultados melhores do que o atual, em menos tempo, com maior qualidade.

Simplicidade

É sempre melhor começar com uma abordagem simples e ir evoluindo, do que mobilizar uma quantidade enorme de recursos para tentar resolver tudo de uma vez.

Sabe aquele sistema perfeito, pensado nos mínimos detalhes para resolver todos os problemas de alguma área da empresa? Pois é, ele nunca vai existir. Muito menos, se for construído do zero.

Esse pensamento se traduz na Lei de Gall:

“Um sistema complexo desenhado do zero nunca funciona e não pode ser remendado para fazer funcionar” – John Gall, no livro Systemantics.

Camadas simples feitas sobre outras camadas simples tornam a solução final bastante complexa, acredite. A natureza é assim, conforme a evolução das espécies: melhorias incrementais ao longo de muito tempo, com seleção natural das melhores soluções.

Pense simples. Como dizia Steve Jobs, “A simplicidade é a maior das sofisticações”.

Aliados

Alguém muito forte tecnicamente tende a pensar de forma individualista, para garantir a qualidade do trabalho final. Porém, à medida em que os trabalhos tornam-se mais complexos, é impossível um indivíduo ou uma equipe muito pequena darem conta.

É mais interessante aliar-se à outras boas pessoas, com alto nível técnico. E também, à gestores, patrocinadores outros stakeholders. Isso tudo exige soft skills.

Uma dica é que, uma pessoa bem intencionada, com genuíno desejo de aprender e ajudar, de alguma forma ou de outra vai fazer aliados ao longo da carreira.

Outra forma de construir boas relações é ensinando e ajudando outros. Tem gente que vai se abrir, outras não, é sempre assim. Com aquelas que mostrarem abertura, aumentar o elo.

Uma equipe de 10 vendedores médios com um bom líder vai performar mais do que um único vendedor acima da média.

Caminho que gosta, tem habilidade e relevância no mercado

Vira e mexe, alguém me pergunta: será que um MBA numa área de Data Science é legal para o futuro? Ou uma especialização em algum outro tema da moda?

Respondo com outra pergunta: é isso que você gosta de fazer? Tem jeito para esta natureza de trabalho? Essa carreira envolve muita matemática, programação e conhecimentos hard, além de exigir uma quantidade mínima de soft skills.

Não adianta a pessoa só olhar para um tema da moda e correr atrás. Até porque, quando ela ficar pronta, o tema não vai mais estar na moda. Lembro de uma época, mais ou menos 2008, em que o petróleo estava no topo: descoberta do pré-sal, Petrobrás empresa mais valiosa do Brasil, etc… Nessa época, um Engenheiro de Geologia especialista em petróleo era a profissão mais valorizada do mundo. A questão é que não é fácil ser bom, qualquer seja a área. É necessário ter muitos anos de estudo, dedicação, muitos anos de prática, para chegar nesse nível. Quem tivesse começado naquela época teria perdido o bonde, porque, alguns anos depois, o mercado voltou ao normal.

É claro que mirar um ramo promissor ajuda. A pergunta que faço é se a pessoa tem o perfil, não está seguindo modinhas.

O ideal é um equilíbrio. Intersecção de fazer algo que gostamos, temos habilidade e tem relevância para o mercado, independente do que está na moda ou não. Estarmos preparados, fazendo um bom trabalho nessa área escolhida. Se vier o bonde da Fortuna, embarcamos, mas não é garantido que ele passe.

Gerar valor de verdade

Sempre tento me guiar em trabalhos que vão dar um retorno à sociedade. Isso não precisa ser necessariamente em causas sociais ou ambientais. Penso que fazer um bom trabalho numa boa empresa vai gerar produtos melhores, mais baratos ou maior disponibilidade de produtos à sociedade. E isso retorna a nós, de alguma forma ou outra.

O que não acho justo é querer entrar em algum cargo público ou empresa com a única finalidade de “se dar bem”, seja com salário, bônus ou estabilidade na posição.

Expectativas

Por fim, as perspectivas são muito boas, numa carreira de dados. Quando estamos navegando numa grande onda, de alguma forma progredimos junto.

Por ser um ramo de conhecimento recente, há muita gente que não entende nem a aplicabilidade – vide post anterior.

Mais e mais dados existirão nos próximos anos. Há uma estimativa da Statista de que 60% dos dados industriais ainda não são capturados – e que, dos dados capturados, 50% não são usados para tomada de decisões. Há um enorme oceano azul de possibilidades.

Vamos em frente.

Veja também: https://ideiasesquecidas.com/2022/09/29/data-science-skills

Arte com Retângulos

Descubra como fazer figuras agradáveis com retângulos dispostos aleatoriamente e algumas linhas de código.

Confira versão interativa em:

https://asgunzi.github.io/Arte-Retangulos—D3-JS/ArteRetangulos.html

Neste caso, estou utilizando a biblioteca D3 do Javascript. É necessário um pouco de domínio desta linguagem, onde recomendo o tutorial da W3Schools.

Para traçar um único retângulo, o comando a seguir funciona:

        svg.append("rect")
          .attr("x", 130)
          .attr("y", 80)
          .attr("width", 140)
          .attr("height", 90)
          .attr("stroke", "black")
          .attr("fill", "darkblue")

Este vai traçar um retângulo nas coordenadas (x,y) = (130,80), com largura 140 e altura 90. Cor azul escuro e contorno preto.

Mais uma linha, para dizer a opacidade de 0,7 – isso para destacar a intersecção com cores diferentes.
.attr(“opacity”, 0.7)

Se colocarmos tudo dentro de um loop for, sem aleatoriedade alguma, teremos um grid de retângulos.

for (i=0; i<10;i++)
{
for (j=0; j<10;j++)
{
svg.append("rect")
.attr("x", 130i) .attr("y", 80j)
.attr("width", 140)
.attr("height", 90)
.attr("stroke", "black")
.attr("fill", "darkblue")
.attr("opacity", 0.7)
}
}

Já o resultado fica um pouco mais interessante se acrescentarmos alguma aleatoriedade na disposição e tamanho dos retângulos.


for (i=0; i<10;i++)
{
    for (j=0; j<10;j++)
    {
        svg.append("rect")
          .attr("x", 130*i + Math.random()*20)
          .attr("y", 80*j + Math.random()*20)
          .attr("width", 140+ Math.random()*20)
          .attr("height", 90+ Math.random()*20)
          .attr("stroke", "black")
          .attr("fill", "darkblue")
          .attr("opacity", 0.7)
    }
}

Algo curioso é que uma disposição totalmente aleatória ou totalmente ordeira fica menos bonita do que uma figura parcialmente ordenada, porém, com um grau de incerteza.

Podemos acrescentar uns blocos de cor amarela, sobrepostos aleatoriamente.

    for (j=0; j<12;j++)
    {
        svg.append("rect")
          .attr("x", Math.random()*1300)
          .attr("y",  Math.random()*800)
          .attr("width", 150+ Math.random()*150)
          .attr("height", 90+ Math.random()*90)
          .attr("stroke", "black")
          .attr("fill", "gold")
          .attr("opacity", 0.7)
    }

Finalmente, acrestamos mais alguns blocos azuis.

O mesmo pode ser feito com outras cores e outras doses de caos / ordem.

Vide código-fonte no Github (https://github.com/asgunzi/Arte-Retangulos—D3-JS).

Veja também.

Um pequeno puzzle mental

O puzzle abaixo, tirado de um livrinho de problemas que tenho, tem uma solução bastante criativa e simples.

Pare por aqui para resolver, se não quiser ver a solução.

Solução:

Uma solução simples é fazer as somas de cada número, porém, existe uma solução melhor.

Visualize dobrar o papel ao longo da diagonal principal (a que está preenchida com 10). O 1 vai somar com o 19, dando 20; as casas com 2 vão somar com as casas com 18, somando 20; e assim sucessivamente.

Como as casas que somam 20 contam duas casas, na média, é como se TODAS as casas do tabuleiro fossem iguais a 10.

Assim, a solução consiste na multiplicação 10 x 10 x 10 = 1000.

Veja também:

Os segredos do infinito

Como o infinito pode permear as nossas vidas?

Indicação de leitura: Os segredos do infinito.

É um livro com uma coletânea de artigos sobre o infinito, com abordagens que vão desde matemática e física, até biologia, filosofia e artes. São tópicos curtos e bastante ilustrados, para facilitar a compreensão.

O livro contém 150 facetas do infinito, mas seguem apenas 4, para dar uma pequena mostra.


Roman Opalka. Artista francês de origem polaca, num dia de 1965 iniciou uma série de pinturas de números. Escreveu o número 1 no canto superior esquerdo do quadro, depois o 2, etc, obstinado a escrever todos os números até o infinito, ou até onde conseguisse chegar em sua vida.

Pintou 233 quadros, usando sempre telas de mesmo tamanho, e números em traços idênticos. Cada quadro continuava onde o anterior tinha terminado. Começou a pronunciar os números pintados e gravar, em 1972, e sempre tirava uma foto em frente ao quadro pintado, para registrar o contraste entre o crescente dos números e o envelhecimento do artista.

O número final que ele pintou foi o 5.607.249, segundo a Wikipedia.


O Nó Borromeano

Três círculos entrelaçados, com uma propriedade deveras particular: cortar qualquer círculo liberta os outros dois.

Tente visualizar qualquer um dos círculos sendo cortado, e como os outros dois restantes são liberados.

Por isso, simboliza a força e a unidade: a importância de cada elo para o sistema todo.


As obras infinitas de M. C. Escher

O artista holandês Mauricius Cornelius Escher produziu alguns dos experimentos visuais mais impressionantes de todos os tempos.

Figuras impossíveis, como água em movimento perpétuo.

Experimentos em planos hiperbólicos.

E diversas outras obras de infinita beleza.


A fórmula da Lemniscata.

Fiz um post completo, para implementar o símbolo do infinito, a Lemniscata. Fui inspirado na fórmula apresentada no livro. Vide o link a seguir.


Portanto, o infinito, apesar de abstrato, está sempre nos inspirando, desafiando a criar as mais belas obras e as mais belas ideias já feitas pelo ser humano.

Obs. Este livro faz parte de um pacote de 20 livros que ganhei do amigo Marcos Gomes de Melo. Sou grato pelo tesouro de conhecimento.

Para os que não tem o privilégio de ter um amigo como o Melo, segue o link da Amazon: https://amzn.to/3nS8meC

Veja também:

Como traçar a Lemniscata no Excel

“Lemniscata” é o nome do símbolo do infinito, o “8 deitado”.

É uma curva bonita e simbólica. Eu imagino uma formiga percorrendo a trilha da curva, indo e vindo infinitamente, sem nunca chegar ao final.

Pois bem, a curva tem uma equação elegante, dada a seguir.

Fica mais fácil de jogar na fórmula se considerarmos a forma paramétrica a seguir.

No Excel, primeiro vamos dividir um ângulo de 360 graus (ou 2*pi) em 100 pedacos.

A primeira coluna vai de 0 a 100, e a segunda coluna calcula o ângulo theta.

A seguir, calcular as coordenada X e Y conforme a fórmula paramétrica dada acima.

Destaquei a fórmula utilizada para X.

Note também que há alguns #Núm!, que ocorrem quando há problemas (no caso, raiz de número negativo).

Selecionar as colunas calculadas X e Y e plotar o gráfico.

Inserir -> Gráficos -> Dispersão -> Dispersão com linhas suaves.

Em Design, podemos escolher alguns estilos alternativos.

Com um pouco de formatação, chegamos à curva Lemniscata, com fórmulas e gráficos de Excel.

Vide arquivo, para quem quiser estudar a fórmula.

Link para download. https://1drv.ms/x/s!Aumr1P3FaK7joDIVFc6dGCU285vX

Vide também:

Lemniscata de Bernoulli – Wikipédia, a enciclopédia livre (wikipedia.org)

O que é um Centro de Excelência em Analytics e por que ter um?

O Centro de Excelência em Analytics (COE) pode ajudar as organizações a serem fortemente data-driven, desse forma atingindo a excelência em decisões e capturando ganhos de eficiência. Resumo baseado no texto https://elogroup.com.br/insights/centro-de-excelencia-em-analytics-na-jornada-de-uma-organizacao-data-driven/.

O que está em jogo? Estudo da McKinsey aponta ganhos da ordem de US$ 10 trilhões com AI e Analytics, mundialmente.

O COE é uma área que reúne engenheiros, cientistas de dados e executivos de negócio. Está está na intersecção de negócios, ciência de dados e tecnologia da informação.

Alguns pontos chave:

  • Centraliza exploração e adoção de ferramentas analíticas,
  • Aculturamento de lideranças e colaboradores em temas analíticos (otimização, simulação, estatística, AI),
  • Ponto de partida do modelo de trabalho de Advanced Analytics na empresa,
  • Possibilita ganhos de escala, padronização e agilidade na entrega de métodos analíticos,
  • Atração e retenção de talentos altamente demandados como data scientists e machine learning engineers. 40% desses profissionais se mantêm abertos a outras propostas. Movimentação por falta de maturidade analítica nas organizações é citada por 44,5%, e escassez de oportunidades de crescimento por 43,8%,
  • O data scientist é um profissional diferente de tecnologia da informação. Diferente em formação, demandas e na forma de pensar.

Empresas que utilizam dados são no mínimo 5% mais produtivas que concorrentes, segundo a ELO Group.

O COE pode ser centralizado ou descentralizado, ou um híbrido de ambos, a depender da jornada de cada empresa.

Qual a diferença entre Analytics e Advanced Analytics?

Enquanto o Analytics básico tem foco em dashboards e análises simples, o Advanced Analytics envolve algoritmos sofisticados e camada extra de inteligência. O COE atua na camada mais sofisticada.

Sendo o responsável por uma área deste tipo, com ganhos da ordem de dezenas de milhões de reais por ano, complemento: não é tarefa fácil agregar valor. O COE deve estar ligado ao negócio, entender o que realmente faz sentido – às vezes um modelo simples é melhor do que um complicado. Não parar em POCs, entregar algo realmente útil para a operação. Quase nunca os dados são bons ou suficientes – mais da metade do trabalho é a parte chata, carregar o piano. A recompensa, ao final da jornada: é muito bom ver o trabalho rodando na prática!

Finalmente, há espaço para este modelo de trabalho crescer bastante no Brasil e no mundo.

Veja também:

A Dança dos Polígonos

Baseado em post anterior, resolvi escrever uma rotinazinha para traçar padrões em malhas de diversos polígonos.

Brinque iterativamente em:
https://asgunzi.github.io/PadroesPoligonos/PadroesPoligonos.html

Padrões em quadrados

Vídeo no youtube:

Quando o polígono tem um número impar de lados, até forma um padrão, mas não fica muito bonito. Vou manter somente os de lado par.

Padrões em hexágonos.
Foto:


Vídeo no Youtube:

Padrões em octágonos
Foto.

Padrões em decágonos
Foto.


Vídeo no youtube:

Padrões em dodecágonos
Foto.


Vídeo no youtube:

Código fonte no Github, para quem quiser fazer modificações.

https://github.com/asgunzi/PadroesPoligonos

Veja também:

Padrõs em círculos: https://ideiasesquecidas.com/2022/05/26/padroes-em-circulos/

Laboratório de mateMágica
https://ideiasesquecidas.com/laboratorio-de-matematica/

Padrões em círculos

É possível criar padrões extremamente intrincados, a partir de construções simples.

(Versão interativa: https://asgunzi.github.io/Padr-es-em-C-rculos/PadroesCirculos.html)

Seja uma malha formada de pontos.

Se o raio de cada ponto for aumentado, e com o raio vermelho levemente maior que o azul.

Começa a ficar interessante quando os raios aumentam a ponto de se tangenciar.

Aumentando mais ainda.

E assim sucessivamente:

Padrões diversos formados por diferentes raios:

Brinque com os padrões em:

https://asgunzi.github.io/Padr-es-em-C-rculos/PadroesCirculos.html

Código fonte, para criar suas próprias variações.

https://github.com/asgunzi/Padr-es-em-C-rculos

Veja também:

Árvores Fractais

Escrevi uma rotinazinha para desenhar fractais em formato de árvore.

Vide em: https://asgunzi.github.io/ArvoreFractal/arvores.html

A cada vez que rodar, uma árvore com parâmetros diferentes será gerada.

Um fractal é uma estrutura matemática com padrões repetidos em escala menor no desenho todo.

Como é uma estrutura autossimilar, é só fazer um código recursivo, relativamente simples. Portanto, é possível criar uma forma de enorme complexidade a partir de regras simples.

No caso da árvore, o padrão é: inicie com um aresta qualquer. Ao final dela, acrescente três arestas com metade do raio, separadas entre elas em 30 graus.

Ao final de cada uma dessas três arestas (ou galhos) novos, acrescente mais três galhos.

E assim sucessivamente:

Há uma quantidade infindável de fractais possíveis de serem feitos dessa forma – só me falta criatividade para fazer algo mais bonito.

Há inúmeros padrões fractais na natureza. Como uma planta “sabe” a programação para virar uma forma de enorme complexidade, como um brócolis? A resposta é que ela não sabe, apenas vai seguindo padrões simples e autossimilares, até chegar ao formato final.

Veja também:

https://ideiasesquecidas.com/2018/09/11/cardioides-circulares

A Espiral de Ulam

A Espiral de Ulam é uma outra de representação dos números primos, estudada pelo brilhante matemático Stanislaw Ulam.

Eu não conhecia essa espiral, foi o amigo Sinésio Barberini que me indicou, após o artigo anterior, a “Colmeia dos Primos”.

A espiral começa com o número 1, e depois vai preenchendo os demais números, seguindo um padrão espiral.

Da mesma forma que a colmeia, pintamos de cinza os números compostos, e de dourado os números primos, imaginando uma peneira passando a luz do sol.

Vide implementação interativa em:

https://asgunzi.github.io/Espiral-de-Ulam/EspiralUlam.html

Alguns prints:

Espiral de Ulam com 5,7 mil números.

Espiral de Ulam com 10 mil números.

É possível notar algumas diagonais no desenho – mas não explicar. Este é um dos mistérios levantados por Ulam, na época, e popularizados pelo grande colunista de puzzles Martin Gardner.


Nota aleatória: Stanislaw Ulam foi um dos criadores do método conhecido como Simulação de Monte Carlo, juntamente com John Von Neumann, na época da Segunda Grande Guerra.







Veja artigos semelhantes e me siga no LinkedIn:
https://www.linkedin.com/in/arnaldogunzi/

https://clube.spm.pt/news/vida-obra-de-stanislaw-ulam

https://en.wikipedia.org/wiki/Ulam_spiral

https://ideiasesquecidas.com/2022/04/22/a-colmeia-dos-numeros-primos

A Colmeia dos Números Primos

Que tal representar números primos numa grid hexagonal, como se fosse uma colmeia?

A ideia é começar de um ponto central, seguindo uma numeração a partir de camadas. Para números compostos, deixar a célula cinza; para números primos, deixar dourado (como se fosse a luz do sol passando por uma peneira, e só há buraco onde o número da casa é primo.

Para 2 camadas, fica assim:

Para 3 camadas:

Fiz uma rotina em Javascript D3, para ficar interativo. Você pode conferir aqui.

https://asgunzi.github.io/Colmeia-Primos/ColmeiaPrimos.html

Para 4 camadas:

Para 7 camadas:

Conforme comentado em post anterior, não parece haver um padrão muito claro – e essa falta de padrão dos primos vem atormentando os matemáticos há milênios!

Para 25 camadas:

Para 50 camadas:

Veja artigos semelhantes e me siga no LinkedIn:

https://www.linkedin.com/in/arnaldogunzi/

Visualização do Crivo de Erastótenes

O crivo de Erastótenes continua sendo uma forma bastante eficiente de encontrar números primos, embora atualmente existam métodos melhores. Foi criado pelo matemático grego Erastótenes, que viveu cerca de 200 a.C.

A ideia é bastante simples.

Digamos, tenho uma lista de números de 1 a 20:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

Pulo o 1, porque este divide todo mundo e até hoje há controvérsias se este deve ou não ser primo.

O próximo é o 2: e aí, risco todo mundo que é divisível por 2, daí para frente:
[1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

O próximo não riscado é o 3: repito o procedimento e elimino todos os múltiplos de 3:

[1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

Repito o processo até o fim, (ou melhor, até raiz(n)), e fico com a lista de números primos até n:

[2, 3, 5, 7, 11, 13, 17, 19]

O termo “crivo” é um sinônimo de “peneira”, e daí vem a ideia desta visualização. Eu queria ver o crivo como se fosse uma peneira mesmo: passa luz nos números primos, e não passa nos compostos.

Para tal, fiz uma rotinazinha em Javascript – D3, que pode ser acessada aqui:

https://asgunzi.github.io/CrivoErastotenesVisual/Index.html

Por exemplo, para n = 100 (um quadrado 10 x 10):

Destacando os primos:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

Para n= 400 (20 x 20):

Para n= 900 (30 x 30):

Não sei bem se isso se parece um QR code dos números primos…

Algo a notar é que há várias colunas vazias (ex. as que são múltiplas de 2), enquanto as que terminam com 1, 3, 7 e 9 são mais cheias. Mas não tem um padrão muito claro – e essa falta de padrão dos primos vem atormentando os matemáticos há milênios!

Veja também:

https://asgunzi.github.io/CrivoErastotenesVisual/Index.html