<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.7">Jekyll</generator><link href="https://wespatrocinio.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://wespatrocinio.github.io/" rel="alternate" type="text/html" /><updated>2020-07-20T13:31:44+00:00</updated><id>https://wespatrocinio.github.io/feed.xml</id><title type="html">wespatrocinio</title><subtitle></subtitle><entry><title type="html">Você já parou para pensar se é um facilitador ou um solucionador de problemas?</title><link href="https://wespatrocinio.github.io/management/data-science/machine-learning/2020/07/20/facilitador-solucionador.html" rel="alternate" type="text/html" title="Você já parou para pensar se é um facilitador ou um solucionador de problemas?" /><published>2020-07-20T00:00:00+00:00</published><updated>2020-07-20T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/management/data-science/machine-learning/2020/07/20/facilitador-solucionador</id><content type="html" xml:base="https://wespatrocinio.github.io/management/data-science/machine-learning/2020/07/20/facilitador-solucionador.html">&lt;h1 id=&quot;highlights&quot;&gt;&lt;em&gt;Highlights&lt;/em&gt;&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Conheça um pouco sobre os perfis de facilitador e solucionador de problemas para saber com qual você se identifica mais;&lt;/li&gt;
  &lt;li&gt;Avaliar o seu perfil requer que você conheça a si mesmo e converse com outras pessoas;&lt;/li&gt;
  &lt;li&gt;Busque por situações onde você consegue explorar melhor seu potencial e se sentir mais satisfeito;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;visão-geral&quot;&gt;Visão geral&lt;/h1&gt;

&lt;p&gt;Recentemente eu fui exposto a um dilema profissional interessante: atuar liderando iniciativas que &lt;strong&gt;facilitariam&lt;/strong&gt; a utilização de &lt;em&gt;Machine Learning&lt;/em&gt; em toda a empresa, ou então assumir iniciativas associadas a um macro-problema e que envolveria o uso de &lt;em&gt;Machine Learning&lt;/em&gt; como ferramenta para potencializar a &lt;strong&gt;solução do problema&lt;/strong&gt; em si. Eu acabei optando pela segunda opção após entrar em um processo de reflexão sobre o meu perfil, o que me satisfaz mais e como consigo contribuir de maneira mais assertiva, e gostaria de compartilhar alguns detalhes desta minha reflexão neste artigo.&lt;/p&gt;

&lt;h2 id=&quot;facilitador-vs-solucionador-de-problemas&quot;&gt;Facilitador &lt;em&gt;VS&lt;/em&gt; Solucionador de problemas&lt;/h2&gt;

&lt;p&gt;Antes de expôr a reflexão em si, eu gostaria de pontuar aqui o que estou chamando de &lt;strong&gt;facilitador&lt;/strong&gt; e &lt;strong&gt;solucionador de problemas&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;O &lt;strong&gt;facilitador&lt;/strong&gt; é a pessoa que “lubrifica” a utilização de determinada ferramenta ou tecnologia por outras pessoas da empresa, independente de sua área de atuação. No meu caso, eu teria o papel de criar ferramentas que facilitariam a criação e publicação de modelos &lt;em&gt;org-wise&lt;/em&gt;, sendo o facilitador da aplicação de &lt;em&gt;Machine Learning&lt;/em&gt; na empresa;&lt;/li&gt;
  &lt;li&gt;O &lt;strong&gt;solucionador de problemas&lt;/strong&gt; é a pessoa que tem a missão de resolver uma família de problemas específicos, utilizando algumas tecnologias de domínio do time (por exemplo, desenvolvimento backend/frontend, &lt;em&gt;machine learning&lt;/em&gt;, entre outros) e também colaborando com outras operações que podem estar associadas a este problema. No meu caso em específico, a família de problemas em si está associada com a Segurança e Qualidade de um &lt;em&gt;marketplace&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O ponto principal da minha reflexão foi qual seria a minha abordagem, em ambos os casos, e como esta abordagem estaria associada às minhas crenças, preferências e aprendizados prévios. Isso é importante para prever fricções futuras e estimar, de maneira grosseira, se o meu trabalho teria bastante impacto para a empresa, uma vez que eu seria o responsável por “dar o tom” da execução das iniciativas.&lt;/p&gt;

&lt;h3 id=&quot;o-facilitador&quot;&gt;O facilitador&lt;/h3&gt;

&lt;p&gt;Ao me colocar no papel de &lt;strong&gt;facilitador&lt;/strong&gt;, eu me vi interagindo com inúmeros problemas diferentes de maneira superficial, tentando mapear as principais dores das diversas áreas e traduzindo-as em ações que permitiriam que determinadas iniciativas das áreas fossem executadas. Ao meu ver, este tipo de pensamento tem algumas premissas associadas:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Eu estaria assumindo que esta ferramenta será amplamente usada pela empresa, o que exige uma série de dependências de outros fatores como proficiência das pessoas em usar tal ferramenta. Por exemplo, se eu construo um reator nuclear em uma empresa metalúrgica esperando que todas as pessoas possam usá-la de maneira adequada e tirando o máximo de seu potencial, talvez eu devesse esperar uns 2-4 anos para que muitos conseguissem estudar o suficiente para ganhar o conhecimento necessário para tal;&lt;/li&gt;
  &lt;li&gt;Eu estaria abraçando a frase do Maslow que, traduzida pelo popular brasileiro, diz: “Quem vende martelo quer que o mundo acabe em prego”.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;o-solucionador-de-problemas&quot;&gt;O solucionador de problemas&lt;/h3&gt;

&lt;p&gt;Do outro lado, me coloquei no papel do &lt;strong&gt;solucionador de problemas&lt;/strong&gt;, onde teria contato com um número reduzido de problemas de maneira mais profunda, tendo como papel principal reduzir os impactos negativos causado pelos problemas e aproveitar oportunidade oriundas deles para aumentar os resultados da empresa, papel que traz consigo as seguintes premissas:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Eu teria que buscar a melhor solução para o problema (custo-benefício, escalabilidade, manutenção, etc.) independente da ferramenta para tal solução. Ou seja, posso me deparar diversas vezes com uma solução onde não precisarei utilizar &lt;em&gt;Machine Learning/Data Science&lt;/em&gt; para aplicar a melhor solução ao problema;&lt;/li&gt;
  &lt;li&gt;Quando pensamos em dores causadas por problemas “gritantes”, soluções que tem perspectivas de resultados no curto-prazo ganham uma relevância muito grande durante priorizações, o que pode levar um time a trabalhar nos famosos “puxadinhos” de soluções e causar um problema grande de continuidade no longo prazo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;o-que-refleti-bastante-para-analisar-o-dilema&quot;&gt;O que refleti bastante para analisar o dilema&lt;/h2&gt;

&lt;p&gt;Para comparar tais situações, procurar os pontos fracos e fortes e tomar minha decisão, eu analisei três pontos que considero fundamentais para a execução de um trabalho:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Meus valores e crenças sobre o que é um trabalho bem feito dentro da minha área de atuação;&lt;/li&gt;
  &lt;li&gt;Quais são os pontos fortes que possuo e como eles se projetam no desafio em vista;&lt;/li&gt;
  &lt;li&gt;O que me trará mais satisfação e perspectivas futuras;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;valores-e-crenças&quot;&gt;Valores e crenças&lt;/h3&gt;

&lt;p&gt;Toda pessoa possui uma “caixa” de valores e crenças e foi preenchida ao longo do tempo e, espero eu, que vá sendo atualizada com novas experiências e fases da vida. Por mais que pareça óbvio, eu sugiro fortemente que você olhe para essa sua caixa constantemente e avalie se está contente com o que está dentro dela.&lt;/p&gt;

&lt;p&gt;No caso desta reflexão, eu identifiquei quais seriam meus principais valores associados à iniciativas de resolver problemas usando tecnologia:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Para escolher uma boa ferramenta, você precisa enxergar claramente qual é o seu problema&lt;/strong&gt;. A analogia que faço sempre sobre este assunto é: se você tentar fixar um quadro na parede tendo um martelo e um parafuso em mãos pode até funcionar, mas você poderia ter um processo muito menos doloroso e com melhores resultados se tivesse olhado um pouco melhor para o problema e suas condições de contorno antes de escolher a solução do seu problema. Olhando para &lt;em&gt;ML/DS&lt;/em&gt;, é esperado que muitas pessoas queiram utilizar estas ferramentas para resolver problemas, dado o &lt;em&gt;hype&lt;/em&gt; do momento. É importante lembrar também que ferramentas mais sofisticadas exigem bastante conhecimento para manuseio e, se aplicadas de maneira errada, podem gerar mais problemas do que soluções. Como analogia, se uma pessoa com pouco conhecimento de metalurgia tentar fazer uma solda elétrica, ela pode “matar” a peça e gerar efeitos colaterais grandes (problemas no olhos, queimaduras, etc.) se não souber aplicar os EPIs e técnicas adequada.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Não existe bala de prata&lt;/strong&gt;. Seria muito cômodo ter uma mesma ferramenta que resolvesse todos os nossos problemas, porém é deveras utópico este pensamento. Cada problema específico tende a requerer ferramentas e soluções específicas e que terão seu tempo de vida. Afinal, assim como os problemas, soluções também são efêmeras e devem ser reavaliadas com certa frequência.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Seja simples, e não simplista&lt;/strong&gt;. Antes se qualquer coisa, gostaria de pontuar o significado de simples que usarei neste contexto. Eu gosto da abordagem do &lt;a href=&quot;https://www.youtube.com/watch?v=qHXpMyLF6Js&quot;&gt;Cortella&lt;/a&gt; sobre simplicidade: algo simples significa suficiência, enquanto algo simplista significa algo despreza elementos necessários na solução de um problema (sugiro leituras sobre a &lt;a href=&quot;https://pt.wikipedia.org/wiki/Navalha_de_Ockham&quot;&gt;Navalha de Ockham&lt;/a&gt;). Sendo assim, precisamos resolver os problemas de maneira simples, de forma a reduzir esforços ao máximo porém sendo suficiente na solução do problem (o que exige que você conheça bem o problema - voltamos ao primeiro ponto). Uma solução simplista poderia aplicar algo &lt;em&gt;cool&lt;/em&gt; porém que consome um tempo significativo e que não resolve todos os aspectos necessários do problema.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É importante ressaltar aqui que, ao longo das conversas para avaliar ambos meus papéis, eu avaliei o pensamento das pessoas que trabalhariam comigo (líderes, pares, etc.) sobre tais valores e avaliar se haveria sinergia ou fricção de valores.&lt;/p&gt;

&lt;h3 id=&quot;pontos-fortes&quot;&gt;Pontos fortes&lt;/h3&gt;

&lt;p&gt;Um aprendizado recente que me foi de grande valia, obtido na leitura do livro “O lado difícil das coisas difíceis” do Ben Horowitz, é que a avaliação de uma pessoa para determinada posição deve considerar os pontos fortes que são necessários para tal posição, e não os pontos fracos que não podem existir para tal. Eu aplico isso tanto para situações onde eu preciso contratar/alocar uma pessoa para determinada iniciativa quanto para auto-avaliações quando eu estou em fase de decidir se aceito um novo desafio profissional.&lt;/p&gt;

&lt;p&gt;No meu caso, a minha auto-avaliação (que certamente tem diversos &lt;em&gt;biases&lt;/em&gt;), me mostra que tenho os seguintes pontos fortes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Alta adaptabilidade a novos contextos (problemas e desafios) e ambientes (pessoas e condições de contorno);&lt;/li&gt;
  &lt;li&gt;Curva de aprendizado bastante acentuada para compreender os pontos mais fundamentais de um contexto, não necessariamente para os tópicos mais profundos;&lt;/li&gt;
  &lt;li&gt;Habilidades para compreender o real problema existente, pois muitas vezes existe uma distância grande entre o problema sendo avaliado e o real problema existente;&lt;/li&gt;
  &lt;li&gt;Criatividade em encontrar soluções simples para os problemas que enfrento;&lt;/li&gt;
  &lt;li&gt;Boas habilidades de comunicação e manipulação (sim, no mundo corporativo há muita manipulação no sentido literal da palavra) para viabilizar a solução de um problema;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;satisfação-e-perspectivas-futuras&quot;&gt;Satisfação e perspectivas futuras&lt;/h3&gt;

&lt;p&gt;Com base nos itens anteriores, eu passei a pensar onde estaria mais satisfeito. Entendo que, para mim, teria maior satisfação se tivesse a oportunidade de aplicar meus pontos fortes e conseguir várias realizações. E, me conhecendo, eu entendo que me sinto realizado quando vejo algo gerando valor até o final da cadeia de valor da qual faço parte, o que me leva à seguinte comparação:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Atuando como um facilitador, eu forneceria ferramentas para que outras pessoas resolvessem os problemas. Supondo que a ferramenta estivesse perfeita e que a solução criada sobre ela funcionasse muito bem, teria um cenário perfeito. Porém, se a ferramenta estiver perfeita mas a solução não estiver e/ou o problema não for mais atacado, eu sentiria certa frustração em não ter gerado o valor necessário;&lt;/li&gt;
  &lt;li&gt;Atuando como um solucionador de problemas, eu usaria ferramentas fornecidas por outras pessoas para construir a solução e teria como missão fazer o necessário para resolver tal problema, tendo uma dependência menos de pessoas, alinhamentos, etc. para fazer o valor chegar até o final da cadeia. Isso me deixaria mais satisfeito. Obviamente, teriam cenários de falhas e frustrações, mas que estariam sob uma zona de influência mais próxima a mim e onde eu teria maiores capacidades de reverter a situação.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além da satisfação em si, avaliei as perspectivas futuras. Supondo que tivesse tremendo sucesso em cumprir meu papel e estivesse pensando no próximo passo, me veria capaz de resolver problemas diferentes e/ou maiores, o que geralmente existe em toda empresa. Entretanto, não me enxergo operando ferramentas/plataformas que já funcionam muito bem e fazem parte do cotidiano das pessoas.&lt;/p&gt;

&lt;h2 id=&quot;conclusões&quot;&gt;Conclusões&lt;/h2&gt;

&lt;p&gt;Juntando todos os pontos acima, junto com outros fatores não abordados aqui (questões pessoais, financeiras, conversas com pessoas, etc.), decidi seguir com o perfil de &lt;strong&gt;solucionador de problemas&lt;/strong&gt; e aceitar o desafio associado a isso. Entendo que, por ocupar papéis de liderança, eu também tenho que &lt;strong&gt;facilitar&lt;/strong&gt; o cotidiano do time e das outras pessoas envolvidas. Entretanto, a facilitação será um meio para resolver os problemas, e não o fim.&lt;/p&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Se você tem habilidade e/ou se sente motivado a resolver problemas fim-a-fim, eu sugiro que você olhe para os problemas de maneira vertical</summary></entry><entry><title type="html">Conflito de cultura em uma linha de _report_</title><link href="https://wespatrocinio.github.io/management/2020/06/26/conflito-de-cultura.html" rel="alternate" type="text/html" title="Conflito de cultura em uma linha de _report_" /><published>2020-06-26T00:00:00+00:00</published><updated>2020-06-26T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/management/2020/06/26/conflito-de-cultura</id><content type="html" xml:base="https://wespatrocinio.github.io/management/2020/06/26/conflito-de-cultura.html">&lt;h1 id=&quot;highlights&quot;&gt;&lt;em&gt;Highlights&lt;/em&gt;&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Não tenha medo do conflito, pois ele é quem mostrará as diferenças e o fará aprender a como resolvê-lo;&lt;/li&gt;
  &lt;li&gt;Seja ético e transparente a todo momento e com todas as pessoas. &lt;strong&gt;Todas&lt;/strong&gt;;&lt;/li&gt;
  &lt;li&gt;Lembre-se que você faz parte de uma empresa que conta com diversas estruturas e mecanismos para lhe ajudar. Um “Exército de um homem só”, ou “Messias”, é uma ótima história para ser escrever em livros, não na vida real.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;visão-geral&quot;&gt;Visão geral&lt;/h1&gt;

&lt;p&gt;Na minha opinião, um dos principais movimentos do mundo corporativo das últimas décadas é a mudança de uma organização orientada pela hierarquia para uma orientação por uma cultura forte, criando laços mais horizontais entre as pessoas e iniciativas. Entretanto, um impacto imediato desta mudança é o conflito de culturas locais de uma estrutura dentro da organização com a cultura geral da empresa, e é sobre este ponto que eu gostaria de fazer algumas explorações.&lt;/p&gt;

&lt;p&gt;Uma possibilidade real, e que eu, particularmente, já enfrentei em minha carreira, é um conflito cultural entre sua liderança imediata e a cultura mais ampla (da empresa ou do time em que trabalha). Neste caso, existem dois pontos importantes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Neste caso em específico, a maior parte das pessoas está alinhada a uma mesma cultura;&lt;/li&gt;
  &lt;li&gt;Entretanto, as poucas pessoas que não estão alinhadas a esta cultura do time estão na liderança mais alta do time, causando um conflito hierárquico de cultura.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em uma situação de conflito hierárquico de cultura, não há democracia. Não é uma questão apenas de adaptar uma pessoa a uma cultura, mas sim um conflito entre pessoas com responsabilidades e poderes diferentes (sim, por mais que existam organizações mais horizontais, líderes ainda tem &lt;strong&gt;poder&lt;/strong&gt; de decisão sobre alocações, demissões, reconhecimentos, etc.), o que requer que mecanismos diferentes sejam utilizados na gestão deste conflito cultural. Em um caso mais “comum”, onde não há disparidade de poder, &lt;em&gt;feedbacks&lt;/em&gt;, programas de mentoria e desenvolvimento funcionam em grande parte dos casos. Já com conflito de poder, o mais provável é que uma pessoa não se sinta confortável em dar um &lt;em&gt;feedback&lt;/em&gt; direto para sua liderança sobre como seu comportamento está desalinhado com a cultura do time. E, nestes casos, é comum que os gestores &lt;em&gt;mid-level&lt;/em&gt; (supervisores, coordenadores, gerentes) tenham que intermediar tal conflito. E é aí que começam a aparecer as armadilhas.&lt;/p&gt;

&lt;h1 id=&quot;o-gestor-mid-level-como-um-tradutor-cultural&quot;&gt;O gestor &lt;em&gt;mid-level&lt;/em&gt; como um tradutor cultural&lt;/h1&gt;

&lt;p&gt;Um caminho comum é que o gestor, que está no fogo cruzado do conflito, tente “absorver” o conflito traduzindo os insumos (diretrizes, &lt;em&gt;feedbacks&lt;/em&gt;, comentários, etc.) da liderança mais alta para o seu time, porém sem tentar resolver o conflito, apenas mitigando a fricção do conflito. Ao fazer isso, algumas armadilhas podem ser disparadas:&lt;/p&gt;

&lt;h2 id=&quot;falta-de-transparência&quot;&gt;Falta de transparência&lt;/h2&gt;

&lt;p&gt;Tal absorção pode levar o gestor a não ser 100% transparente com ambas os lados, maquiando ou omitindo fatores que poderiam aumentar a fricção. Este tipo de ação automaticamente cria vulnerabilidades futuras, pois tais fatores podem aparecer futuramente junto com a omissão ou maquiagem, o que agravará ainda mais a situação.&lt;/p&gt;

&lt;p&gt;Para evitar este tipo de situação, o gestor deve sempre buscar a transparência, mesmo que isso crie situações desconfortáveis. E é importante notar que tais situações desconfortáveis não são necessariamente ruins, pois são elas que tornarão evidente que há um conflito a ser tratado. Lembre-se de que ética, transparência e respeito são valores que devem ser aplicado a relações entre duas pessoas &lt;strong&gt;quaisquer&lt;/strong&gt;, não importa o cargo que está escrito na assinatura de e-mail dela.&lt;/p&gt;

&lt;h2 id=&quot;resolver-o-problema-sozinho&quot;&gt;Resolver o problema sozinho&lt;/h2&gt;

&lt;p&gt;Uma outra ação que dispara outras armadilhas é a tentativa de resolver tal conflito sozinho, fazendo com o que o gestor tente “comprar a briga” com a liderança sem nenhum tipo de suporte. Isso jamais será um conflito justo por conta da disparidade de poderes. Isso não significa que o gestor não pode sentar com a liderança para expor sua visão sobre o conflito (até sugiro que faça isso o quanto antes). Entretanto, ele deve também buscar os demais mecanismos para mediar tal conflito.&lt;/p&gt;

&lt;p&gt;É importante que o gestor enxergue, de maneira clara, que o alinhamento cultural é uma tarefa difícil que conta com o trabalho das áreas de Pessoas/RH e de todos os líderes, incluindo os seus líderes imediatos. Sendo assim, tal conflito deve ser levado para todas as partes necessárias para sua resolução, sempre de maneira transparente. Dessa forma, o gestor pode ter apoio de pares, RH, lideranças ainda mais altas, entre outros, para resolver tal conflito.&lt;/p&gt;

&lt;h2 id=&quot;ser-apenas-um-repetidor&quot;&gt;Ser apenas um repetidor&lt;/h2&gt;

&lt;p&gt;Há também o caso onde o gestor resolve se isentar do conflito e agir apenas como um repetidor, também conhecido como “lavar as mãos”. Com isso, os níveis de fricção seriam elevados e ele teria um grande trabalho de remediar os danos de tal fricção (queda de engajamento, demissões, etc.). Como exemplo mais tangível, eu acho extremamente desmotivante receber um &lt;em&gt;feedback&lt;/em&gt; do meu gestor, que veio da liderança dele, no formato: “eu vou te dar um &lt;em&gt;feedback&lt;/em&gt; que veio da minha liderança, mas isso não significa que eu concorde com ele”. Isso desmonta qualquer expectativa de que o &lt;em&gt;feedback&lt;/em&gt; que você recebe foi algo discutido, amadurecido e que é algo que realmente é esperado de você. E a mesma coisa serve para o caminho contrário, quando o gestor, por exemplo, precisa passar um &lt;em&gt;feedback&lt;/em&gt; para a liderança sobre o atraso em uma entrega importante, sem se comprometer com este atraso.&lt;/p&gt;

&lt;p&gt;Se você é um gestor, automaticamente você é intermediador de uma comunicação onde você tem interferência direta nos fatores. Em outras palavras, toda mensagem que você precisa trafegar entre camadas diferentes de sua estrutura devem ter passado por um consenso/consentimento de todos os que serão representados por aquela mensagem. Por exemplo, se a liderança mais alta quer passar um &lt;em&gt;feedback&lt;/em&gt;, via gestor, sobre o comportamento de uma pessoa do time técnico, é necessário que ocorra um consenso entre alta liderança e gestor sobre a mensagem, a qual deve ser repassada à pessoa do time técnico, sem mudanças. Com isso, o gestor também passa a ser dono daquele &lt;em&gt;feedback&lt;/em&gt; e age como tal (o famoso &lt;em&gt;skin in the game&lt;/em&gt;, tão falado no mundo corporativo atual).&lt;/p&gt;

&lt;h1 id=&quot;algumas-conclusões&quot;&gt;Algumas conclusões&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Não tenha medo do conflito, pois ele é quem mostrará as diferenças e o fará aprender a como resolvê-lo;&lt;/li&gt;
  &lt;li&gt;Seja ético e transparente a todo momento e com todas as pessoas. &lt;strong&gt;Todas&lt;/strong&gt;;&lt;/li&gt;
  &lt;li&gt;Lembre-se que você faz parte de uma empresa que conta com diversas estruturas e mecanismos para lhe ajudar. Um “Exército de um homem só”, ou “Messias”, é uma ótima história para ser escrever em livros, não na vida real.&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Alguns pensamentos sobre como enfrentar situações onde não há um alinhamento cultural completo entre as camadas vizinhas de sua linha de _report_</summary></entry><entry><title type="html">AutoML é útil, mas não vai fazer mágica em cima de seus problemas</title><link href="https://wespatrocinio.github.io/data-science/machine-learning/automl/2020/05/29/automl-e-util-mas-nao-vai-fazer-magica-em-cima-de-seus-problemas.html" rel="alternate" type="text/html" title="AutoML é útil, mas não vai fazer mágica em cima de seus problemas" /><published>2020-05-29T00:00:00+00:00</published><updated>2020-05-29T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/data-science/machine-learning/automl/2020/05/29/automl-e-util-mas-nao-vai-fazer-magica-em-cima-de-seus-problemas</id><content type="html" xml:base="https://wespatrocinio.github.io/data-science/machine-learning/automl/2020/05/29/automl-e-util-mas-nao-vai-fazer-magica-em-cima-de-seus-problemas.html">&lt;h1 id=&quot;highlights&quot;&gt;&lt;em&gt;Highlights&lt;/em&gt;&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;As ferramentas de AutoML parecem ter grande potencial de contribuição no cotidiano de um time de &lt;em&gt;Data Science&lt;/em&gt;/&lt;em&gt;Machine Learning&lt;/em&gt;, porém nas etapas mais adiantadas do processo de desenvolvimento e &lt;em&gt;realease&lt;/em&gt; de modelos;&lt;/li&gt;
  &lt;li&gt;Etapas de entendimento do problema e engenharia de &lt;em&gt;features&lt;/em&gt; são pouco impactados por este tipo de ferramentas;&lt;/li&gt;
  &lt;li&gt;Analisando o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt;, o processo automatizado tem umas carga de aprendizado bastante grande e exige um certo processo exploratório inicial para redução do espaço de busca de algoritmos e parâmetros para facilitar uma segunda etapa de otimização de hiperparâmetros propriamente dito;&lt;/li&gt;
  &lt;li&gt;O código usado na exploração do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt; está disponível em um &lt;a href=&quot;https://github.com/wespatrocinio/learning_automl/&quot;&gt;repositório público&lt;/a&gt; na minha conta do GitHub;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;o-artigo-em-si&quot;&gt;O artigo em si&lt;/h1&gt;

&lt;p&gt;Nos últimos meses tenho me dedicado à identificar e otimizar o cotidiano de times de &lt;em&gt;Machine Learning&lt;/em&gt; &amp;amp; AI com processos, políticas e novas tecnologias. Um dos pontos que tenho avaliado em mais detalhes é a utilização de bibliotecas de &lt;em&gt;automated machine learning&lt;/em&gt; (AutoML) para auxiliar o processo de encontrar o melhor modelo possível em desenvolvimento. Após algumas análises, decidi compartilhar algumas de minhas impressões neste artigo.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“&lt;em&gt;I have a dream that one day my product is going to be supplied by self-assembled machine learning models&lt;/em&gt;.” (Algum C-level de alguma empresa anunciando que agora são &lt;em&gt;AI-first&lt;/em&gt; e que serão referência em AI nos próximos 2 anos).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;o-que-será-considerado-como-um-modelo-neste-artigo&quot;&gt;O que será considerado como um modelo neste artigo?&lt;/h2&gt;

&lt;p&gt;Na minha perspectiva (e acredito que não só minha), um modelo de &lt;em&gt;Machine Learning&lt;/em&gt; é composto por três partes fundamentais. Já alerto que simplificarei bastante a descrição das partes para facilitar o entendimento de quem não tem muito vocabulário deste contexto.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;&lt;em&gt;Dataset&lt;/em&gt;&lt;/strong&gt;, que contém os dados com todas as &lt;em&gt;features&lt;/em&gt; e registros que serão utilizados para o treinamento e validação do modelo, independente do fato de ser supervisionado ou não;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Algoritmo/Ensemble&lt;/strong&gt;, que é a ferramenta que será usada para encontrar determinados padrões nos dados do &lt;em&gt;dataset&lt;/em&gt; e ser capaz de utilizar tais padrões para processar novos registros que sejam requisitados para o modelo e realizar uma predição (classificação, regressão, &lt;em&gt;pattern recognition&lt;/em&gt;, etc.).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Hiper-parâmetros&lt;/strong&gt;: os parâmetros a serem usados pelo algoritmo e que serão otimizados (também chamado de &lt;em&gt;tunning&lt;/em&gt;) de forma a obter maior capacidade de predição de um algoritmo sobre um determinado conjunto de dados. Alguns pontos importantes são:
    &lt;ul&gt;
      &lt;li&gt;Existem parâmetros tanto do algoritmo quanto do &lt;em&gt;dataset&lt;/em&gt; (por exemplo, balanço entre classes positivas e negativas em um caso de aprendizado supervisionado) e de algoritmo (por exemplo, a profundidade máxima de uma árvore de decisão);&lt;/li&gt;
      &lt;li&gt;Um mesmo algoritmo aplicado a dois &lt;em&gt;datasets&lt;/em&gt; diferentes pode (e provavelmente irá) requerer diferentes valores de parâmetros para alcançar a performance ótima;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/ml-hyperparameter.png&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;&lt;a href=&quot;https://cambridgecoding.wordpress.com/2016/04/03/scanning-hyperspace-how-to-tune-machine-learning-models/&quot;&gt;Diagrama simplificado sobre as etapas da criação de um modelo de ML&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;qual-a-minha-compreensão-sobre-automl-neste-momento&quot;&gt;Qual a minha compreensão sobre AutoML neste momento?&lt;/h2&gt;

&lt;p&gt;Ao explorar algumas bibliotecas de AutoML como o &lt;a href=&quot;https://automl.github.io/auto-sklearn/master/#&quot;&gt;auto-sklearn&lt;/a&gt;, &lt;a href=&quot;http://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html&quot;&gt;H2O&lt;/a&gt;, &lt;a href=&quot;https://cloud.google.com/automl?hl=pt-br&quot;&gt;Google Cloud AutoML&lt;/a&gt; e outras, identifiquei, de maneira geral, o seguinte comportamento em todas elas:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;oferecem funcionalidades de Engenharia de &lt;em&gt;Features&lt;/em&gt; que aplicam novas representações de um mesmo dado (por exemplo, fazer &lt;a href=&quot;https://en.wikipedia.org/wiki/One-hot&quot;&gt;&lt;em&gt;One Hot Encoding&lt;/em&gt;&lt;/a&gt; de uma &lt;em&gt;feature&lt;/em&gt; categórica) mas não abordam muito bem a relevância delas;&lt;/li&gt;
  &lt;li&gt;oferecem um grande portfolio de algoritmos que serão utilizados na busca pelo melhor modelo;&lt;/li&gt;
  &lt;li&gt;permitem customizações de métricas e de algoritmos para permitir que os usuários utilizem a ferramenta de AutoML como uma plataforma de otimização que pode ser encaixada nas particularidades de uma empresa;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dessa forma, as ferramentas que explorei não agregam muito valor à etapa de engenharia de &lt;em&gt;features&lt;/em&gt;, com foco explícito no &lt;em&gt;tunning&lt;/em&gt; de algoritmos e hiper-parâmetros. Ao meu ver, isso limita bastante a magnitude do impacto que este tipo de ferramenta tem na automação do processo de criação de um modelo. Eis alguns pontos que sustentam esta minha opinião:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Por mais que muitos acreditem que um modelo de ML é um &lt;em&gt;data monster&lt;/em&gt; que vai processar milhares de &lt;em&gt;features&lt;/em&gt; com dados de usuários dos últimos 10 anos e se tornar um oráculo das predições, não é o que acontece de fato. A etapa de tratamento de dados, construção de &lt;em&gt;features&lt;/em&gt; e identificação das mais relevantes compõe os maiores desafios na construção de modelos;&lt;/li&gt;
  &lt;li&gt;Alguns algoritmos possuem premissas as quais os dados precisam respeitar para que sejam aplicados adequadamente (por exemplo, o &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_discriminant_analysis&quot;&gt;LDA&lt;/a&gt; assume que os dados tenham distribuição normal e que ambas as classes possuam uma mesma matriz de covariância). A automação apenas do processo de &lt;em&gt;tunning&lt;/em&gt; pode contribuir com a negligência deste tipo de validação;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;um-breve-exemplo-algoritmos-vanilla-vs-auto-sklearn&quot;&gt;Um breve exemplo: algoritmos &lt;em&gt;vanilla&lt;/em&gt; &lt;em&gt;VS&lt;/em&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;Para exemplificar de maneira mais tangível o valor percebido durante a minha exploração das bibliotecas, eu mostrarei um exemplo simples que construi para explorar como o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt; funciona e o quanto ele contribuiria para um modelo construído sobre dados que já conheço. Portanto, eu tomei como base um &lt;a href=&quot;https://github.com/wespatrocinio/music_genre_classification/blob/master/notebooks/music_genre_classification.ipynb&quot;&gt;modelo&lt;/a&gt; que fiz alguns anos atrás, para fins didáticos, para prever o gênero de uma música a partir de sua letra. Sendo assim, usei os mesmos dados e gerei as mesmas &lt;em&gt;features&lt;/em&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Tf%E2%80%93idf&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tf-idf&lt;/code&gt;&lt;/a&gt; dos 200 &lt;em&gt;tokens&lt;/em&gt; mais relevantes) para treinar um modelo. Neste artigo eu não entrarei em detalhes sobre a geração destas &lt;em&gt;features&lt;/em&gt;.&lt;/p&gt;

&lt;h3 id=&quot;vanilla-decision-tree&quot;&gt;&lt;em&gt;Vanilla Decision Tree&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Para ter um &lt;em&gt;baseline&lt;/em&gt; simples, vou criar um modelo usando &lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html&quot;&gt;Árvore de Decisão&lt;/a&gt; (&lt;em&gt;Decision Tree&lt;/em&gt;) com os parâmetros padrão do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scikit-learn&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;sklearn.tree&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DecisionTreeClassifier&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DecisionTreeClassifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_features&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;train_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;predicted_target&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;predict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_features&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Accuracy score: &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sklearn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;metrics&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;accuracy_score&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;predicted_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O resultado impresso por este trecho de código é:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Accuracy score: 0.6412903225806451
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Sendo assim, um modelo criado sobre este conjunto de &lt;em&gt;features&lt;/em&gt; usando uma árvore de decisão “padrão” gerou um modelo com &lt;strong&gt;64,1%&lt;/strong&gt; de &lt;a href=&quot;https://en.wikipedia.org/wiki/Accuracy_and_precision#In_binary_classification&quot;&gt;acurácia&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;vanilla-random-forests&quot;&gt;&lt;em&gt;Vanilla Random Forests&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Da mesma forma que usei uma árvore de decisão sem otimização de hiper-parâmetros como &lt;em&gt;baseline&lt;/em&gt;, farei o mesmo com &lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html&quot;&gt;&lt;em&gt;Random Forests&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;sklearn.ensemble&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RandomForestClassifier&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RandomForestClassifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_features&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;train_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;predicted_target&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;predict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_features&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Accuracy score: &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sklearn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;metrics&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;accuracy_score&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;predicted_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O resultado impresso por este trecho de código é:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Accuracy score: 0.7896774193548387
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A acurácia obtida por este modelo foi de &lt;strong&gt;79,0%&lt;/strong&gt;, consideravelmente maior que o modelo &lt;em&gt;vanilla&lt;/em&gt; de Árvore de Decisão.&lt;/p&gt;

&lt;h3 id=&quot;auto-sklearn&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;O &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt; é uma biblioteca construída em cima do &lt;a href=&quot;https://scikit-learn.org/stable/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scikit-learn&lt;/code&gt;&lt;/a&gt; e que ganhou relevância ao ser &lt;a href=&quot;https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning&quot;&gt;apresentado no NIPS&lt;/a&gt; e também ao &lt;a href=&quot;https://www.kdnuggets.com/2016/08/winning-automl-challenge-auto-sklearn.html&quot;&gt;vencer um desafio de AutoML&lt;/a&gt;. Pela simplicidade do propósito desta exploração, o escolhi para fazer alguns testes.&lt;/p&gt;

&lt;p&gt;Algumas premissas importantes para interpretar melhor o que vem a seguir:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Eu executei os &lt;em&gt;pipelines&lt;/em&gt; em meu computador pessoal e para fins de exploração. Sendo assim, não fiz longas e extensivas explorações dos recursos da biblioteca;&lt;/li&gt;
  &lt;li&gt;De propósito, eu explorei a biblioteca de maneira mais &lt;em&gt;naive&lt;/em&gt; e tentando simular como pessoas sem tanta experiência neste tipo de modelagem fariam a exploração;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Show me the code&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;autosklearn.classification&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;yaml&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'config.yml'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;yaml&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Loader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yaml&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FullLoader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;automl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;autosklearn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;classification&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AutoSklearnClassifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;automl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_features&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;train_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;predicted_target&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;automl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;predict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_features&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;automl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;show_models&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;automl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sprint_statistics&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Accuracy score&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sklearn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;metrics&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;accuracy_score&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;predicted_target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Para executar os &lt;em&gt;pipelines&lt;/em&gt;, eu montei as configurações em arquivos &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yaml&lt;/code&gt; com os parâmetros a serem usados pelo &lt;em&gt;pipeline&lt;/em&gt; do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;automl&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;configyml-sem-ensemble&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.yml&lt;/code&gt; sem &lt;em&gt;ensemble&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Na primeira tentativa, vou tentar encontrar um modelo simples com apenas um conjunto de algoritmo + hiperparâmetros. Para isso, usei as configurações abaixo.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;n_jobs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;per_run_time_limit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;120&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 2 minutes&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;time_left_for_this_task&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1800&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 30 minutes &lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;include_preprocessors&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;no_preprocessing'&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ensemble_size&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# to get only a model, not an ensemble&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[(1.000000, SimpleClassificationPipeline({'balancing:strategy': 'none', 'classifier:__choice__': 'bernoulli_nb', 'data_preprocessing:categorical_transformer:categorical_encoding:__choice__': 'no_encoding', 'data_preprocessing:categorical_transformer:category_coalescence:__choice__': 'no_coalescense', 'data_preprocessing:numerical_transformer:imputation:strategy': 'mean', 'data_preprocessing:numerical_transformer:rescaling:__choice__': 'normalize', 'feature_preprocessor:__choice__': 'no_preprocessing', 'classifier:bernoulli_nb:alpha': 10.12857981579372, 'classifier:bernoulli_nb:fit_prior': 'False'},
dataset_properties={
  'task': 2,
  'sparse': False,
  'multilabel': False,
  'multiclass': True,
  'target_type': 'classification',
  'signed': False})),
]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;O melhor modelo encontrado nesta execução foi o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bernoulli_nb&lt;/code&gt; (&lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.BernoulliNB.html&quot;&gt;&lt;em&gt;Naive Bayes classifier for multivariate Bernoulli&lt;/em&gt;&lt;/a&gt;). Até aí, nenhum problema.&lt;/p&gt;

&lt;p&gt;As características da execução do &lt;em&gt;pipeline&lt;/em&gt; foram:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Metric: accuracy
Best validation score: 0.786458
Number of target algorithm runs: 1903
Number of successful target algorithm runs: 1880
Number of crashed target algorithm runs: 9
Number of target algorithms that exceeded the time limit: 5
Number of target algorithms that exceeded the memory limit: 9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Vamos às métricas:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Accuracy score: 0.7638709677419355
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ou seja, o modelo encontrado automaticamente pelo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt; foi &lt;strong&gt;melhor&lt;/strong&gt; que o &lt;em&gt;vanilla Decision Tree&lt;/em&gt; porém &lt;strong&gt;pior&lt;/strong&gt; que o &lt;em&gt;vanilla Random Forest&lt;/em&gt;.&lt;/p&gt;

&lt;h4 id=&quot;configyml-com-ensemble&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.yml&lt;/code&gt; com &lt;em&gt;ensemble&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Para explorar melhor as funcionalidades da biblioteca, criei um novo &lt;em&gt;pipeline&lt;/em&gt; onde busco como resultado final um &lt;a href=&quot;https://en.wikipedia.org/wiki/Ensemble_learning&quot;&gt;&lt;em&gt;ensemble&lt;/em&gt;&lt;/a&gt; com 3 modelos para maximizar a acurácia da classificação. Abaixo seguem as configurações deste novo &lt;em&gt;pipeline&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;n_jobs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;per_run_time_limit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;120&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 2 minutes&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;time_left_for_this_task&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1800&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 30 minutes &lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;include_preprocessors&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;no_preprocessing'&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ensemble_size&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# to get only a model, not an ensemble&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As características desse &lt;em&gt;ensemble&lt;/em&gt; foram:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[(0.333333, SimpleClassificationPipeline({'balancing:strategy': 'weighting', 'classifier:__choice__': 'sgd', 'data_preprocessing:categorical_transformer:categorical_encoding:__choice__': 'no_encoding', 'data_preprocessing:categorical_transformer:category_coalescence:__choice__': 'minority_coalescer', 'data_preprocessing:numerical_transformer:imputation:strategy': 'mean', 'data_preprocessing:numerical_transformer:rescaling:__choice__': 'quantile_transformer', 'feature_preprocessor:__choice__': 'no_preprocessing', 'classifier:sgd:alpha': 1.1309190654192295e-07, 'classifier:sgd:average': 'True', 'classifier:sgd:fit_intercept': 'True', 'classifier:sgd:learning_rate': 'optimal', 'classifier:sgd:loss': 'perceptron', 'classifier:sgd:penalty': 'elasticnet', 'classifier:sgd:tol': 0.0003060155962964433, 'data_preprocessing:categorical_transformer:category_coalescence:minority_coalescer:minimum_fraction': 0.006195858518768137, 'data_preprocessing:numerical_transformer:rescaling:quantile_transformer:n_quantiles': 1929, 'data_preprocessing:numerical_transformer:rescaling:quantile_transformer:output_distribution': 'uniform', 'classifier:sgd:l1_ratio': 0.0018872923177367703},
dataset_properties={
  'task': 2,
  'sparse': False,
  'multilabel': False,
  'multiclass': True,
  'target_type': 'classification',
  'signed': False})),
(0.333333, SimpleClassificationPipeline({'balancing:strategy': 'weighting', 'classifier:__choice__': 'extra_trees', 'data_preprocessing:categorical_transformer:categorical_encoding:__choice__': 'no_encoding', 'data_preprocessing:categorical_transformer:category_coalescence:__choice__': 'no_coalescense', 'data_preprocessing:numerical_transformer:imputation:strategy': 'mean', 'data_preprocessing:numerical_transformer:rescaling:__choice__': 'quantile_transformer', 'feature_preprocessor:__choice__': 'no_preprocessing', 'classifier:extra_trees:bootstrap': 'False', 'classifier:extra_trees:criterion': 'entropy', 'classifier:extra_trees:max_depth': 'None', 'classifier:extra_trees:max_features': 0.23993615625255216, 'classifier:extra_trees:max_leaf_nodes': 'None', 'classifier:extra_trees:min_impurity_decrease': 0.0, 'classifier:extra_trees:min_samples_leaf': 1, 'classifier:extra_trees:min_samples_split': 10, 'classifier:extra_trees:min_weight_fraction_leaf': 0.0, 'data_preprocessing:numerical_transformer:rescaling:quantile_transformer:n_quantiles': 1169, 'data_preprocessing:numerical_transformer:rescaling:quantile_transformer:output_distribution': 'uniform'},
dataset_properties={
  'task': 2,
  'sparse': False,
  'multilabel': False,
  'multiclass': True,
  'target_type': 'classification',
  'signed': False})),
(0.333333, SimpleClassificationPipeline({'balancing:strategy': 'weighting', 'classifier:__choice__': 'qda', 'data_preprocessing:categorical_transformer:categorical_encoding:__choice__': 'one_hot_encoding', 'data_preprocessing:categorical_transformer:category_coalescence:__choice__': 'no_coalescense', 'data_preprocessing:numerical_transformer:imputation:strategy': 'most_frequent', 'data_preprocessing:numerical_transformer:rescaling:__choice__': 'standardize', 'feature_preprocessor:__choice__': 'no_preprocessing', 'classifier:qda:reg_param': 0.40061768323123503},
dataset_properties={
  'task': 2,
  'sparse': False,
  'multilabel': False,
  'multiclass': True,
  'target_type': 'classification',
  'signed': False})),
]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Resumindo, o &lt;em&gt;ensemble&lt;/em&gt; é composto por um modelo &lt;a href=&quot;https://scikit-learn.org/stable/modules/sgd.html&quot;&gt;SGD - &lt;em&gt;Stochastic Gradient Descendent&lt;/em&gt;&lt;/a&gt;, um &lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html&quot;&gt;&lt;em&gt;Extra Trees&lt;/em&gt;&lt;/a&gt; e um &lt;a href=&quot;https://scikit-learn.org/stable/modules/lda_qda.html&quot;&gt;QDA - &lt;em&gt;Quadratic Discriminant Analysis&lt;/em&gt;&lt;/a&gt;, cada um com o respectivo conjunto de hiperparâmetros listados no &lt;em&gt;snippet&lt;/em&gt; acima.&lt;/p&gt;

&lt;p&gt;As características da execução do &lt;em&gt;pipeline&lt;/em&gt; foram:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Metric: accuracy
Best validation score: 0.786458
Number of target algorithm runs: 1949
Number of successful target algorithm runs: 1908
Number of crashed target algorithm runs: 10
Number of target algorithms that exceeded the time limit: 6
Number of target algorithms that exceeded the memory limit: 25
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Vamos à acurácia:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Accuracy score: 0.7316129032258064
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ou seja, o &lt;em&gt;ensemble&lt;/em&gt; obteve uma acurácia de &lt;strong&gt;73,2%&lt;/strong&gt; que, quando comparada aos casos anteriores, nos dá o seguinte &lt;em&gt;ranking&lt;/em&gt;:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;Vanilla Random Forest&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;AutoML sem &lt;em&gt;ensemble&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;AutoML com &lt;em&gt;ensemble&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Vanilla Decision Tree&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;configyml-otimizando-apenas-o-random-forest&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.yml&lt;/code&gt; otimizando apenas o &lt;em&gt;Random Forest&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Como terceira tentativa, decidi explorar um &lt;em&gt;pipeline&lt;/em&gt; para otimização apenas do &lt;em&gt;Random Forest&lt;/em&gt; usando as configurações abaixo:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;n_jobs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;per_run_time_limit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;60&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 1 minute&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;time_left_for_this_task&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1200&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 20 minutes &lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;include_preprocessors&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;no_preprocessing'&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;include_estimators&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;random_forest'&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# include only Random Forest&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ensemble_size&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# to get only a model, not an ensemble&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O melhor modelo encontrado pelo &lt;em&gt;pipeline&lt;/em&gt; foi:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[(1.000000, SimpleClassificationPipeline({'balancing:strategy': 'weighting', 'classifier:__choice__': 'random_forest', 'data_preprocessing:categorical_transformer:categorical_encoding:__choice__': 'no_encoding', 'data_preprocessing:categorical_transformer:category_coalescence:__choice__': 'minority_coalescer', 'data_preprocessing:numerical_transformer:imputation:strategy': 'mean', 'data_preprocessing:numerical_transformer:rescaling:__choice__': 'normalize', 'feature_preprocessor:__choice__': 'no_preprocessing', 'classifier:random_forest:bootstrap': 'False', 'classifier:random_forest:criterion': 'gini', 'classifier:random_forest:max_depth': 'None', 'classifier:random_forest:max_features': 0.14928991954179588, 'classifier:random_forest:max_leaf_nodes': 'None', 'classifier:random_forest:min_impurity_decrease': 0.0, 'classifier:random_forest:min_samples_leaf': 2, 'classifier:random_forest:min_samples_split': 8, 'classifier:random_forest:min_weight_fraction_leaf': 0.0, 'data_preprocessing:categorical_transformer:category_coalescence:minority_coalescer:minimum_fraction': 0.010000000000000004},
dataset_properties={
  'task': 2,
  'sparse': False,
  'multilabel': False,
  'multiclass': True,
  'target_type': 'classification',
  'signed': False})),
]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ao olhar os parâmetros usados neste modelo, é possível observar que foram poucas as customizações de parâmetros realizadas, o que resulta em um modelo razoavelmente próximo ao &lt;em&gt;vanilla Random Forest&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;As características da execução do &lt;em&gt;pipeline&lt;/em&gt; foram:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Metric: accuracy
Best validation score: 0.786458
Number of target algorithm runs: 1260
Number of successful target algorithm runs: 1253
Number of crashed target algorithm runs: 0
Number of target algorithms that exceeded the time limit: 7
Number of target algorithms that exceeded the memory limit: 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Os números acima mostram que o &lt;em&gt;pipeline&lt;/em&gt; executou mais de 1200 configurações diferentes de modelo, com alguns poucos casos que excederam o limite de tempo de 1 minuto por modelo.&lt;/p&gt;

&lt;p&gt;Vamos às métricas:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Accuracy score: 0.8025806451612904
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ou seja, este &lt;em&gt;pipeline&lt;/em&gt; resultou em um modelo que alcançou uma acurácia de &lt;strong&gt;80,3%&lt;/strong&gt;, o maior alcançado até o momento. Entretanto, o ganho não foi muito substancial (1,6%) e o resultado final foi um modelo muito parecido com o &lt;em&gt;vanilla&lt;/em&gt;.&lt;/p&gt;

&lt;h1 id=&quot;algumas-conclusões-e-próximos-passos&quot;&gt;Algumas conclusões e próximos passos&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Das opções testadas, o melhor modelo obtido foi a partir de um &lt;em&gt;pipeline&lt;/em&gt; do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt; otimizando apenas &lt;em&gt;Random Forests&lt;/em&gt;. Entretanto, o resultado de acurácia é muito semelhante ao &lt;em&gt;vanilla Random Forest&lt;/em&gt;;&lt;/li&gt;
  &lt;li&gt;Há uma curva de aprendizado considerável para extrair o melhor da biblioteca;&lt;/li&gt;
  &lt;li&gt;É possível que eu tenha dedicado pouco tempo de computação para este tipo de otimização pelo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-sklearn&lt;/code&gt;. Se for o caso, acredito que este tipo de “necessidade” poderia ficar mais explícito nas documentações para que os usuários tivessem uma expectativa mais realista sobre o que precisariam para extrair valor da biblioteca;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Neste artigo vamos analisar alguns pontos sobre como bibliotecas de AutoML podem te ajudar, o nível de automação que elas oferecem e a curva de aprendizado para utilizar um exemplo (auto-sklearn)</summary></entry><entry><title type="html">Do fundamento à aplicação: Árvores Métricas</title><link href="https://wespatrocinio.github.io/data-science/machine-learning/2020/02/16/fundamento-aplicacoes-arvores-metricas.html" rel="alternate" type="text/html" title="Do fundamento à aplicação: Árvores Métricas" /><published>2020-02-16T00:00:00+00:00</published><updated>2020-02-16T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/data-science/machine-learning/2020/02/16/fundamento-aplicacoes-arvores-metricas</id><content type="html" xml:base="https://wespatrocinio.github.io/data-science/machine-learning/2020/02/16/fundamento-aplicacoes-arvores-metricas.html">&lt;p&gt;Este será o primeiro artigo de uma série chamada “Do fundamento à aplicação”, que abordará, através de exemplos e pequenas aplicações, a importância de conhecer bem os fundamentos das metodologias e ferramentas que utilizamos em nosso dia-a-dia para que possamos fazer boas escolhas na hora de criar e implementar soluções, sejam elas técnicas ou gerenciais. Além da conexão entre fundamentos e aplicações, haverá uma tentativa de traduzir alguns conceitos para uma linguagem menos formal e técnica.&lt;/p&gt;

&lt;p&gt;O tema estreante será uma estrutura de dados bastante interessante e de muita utilidade: as Árvores Métricas (fundamento) cuja aplicação é um bom e velho conhecido de todos nós — &lt;strong&gt;corretor ortográfico&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;alguns-fundamentos-importantes&quot;&gt;Alguns fundamentos importantes&lt;/h2&gt;

&lt;p&gt;O principal propósito deste tipo de conteúdo e mostrar, além de trechos de código mostrando como construir uma aplicação, o que está “embaixo do capô” deste código, permitindo um entendimento mais completo da solução, além de maiores capacidades de extensão de partes específicas para resolver problemas que são próximos a este.&lt;/p&gt;

&lt;p&gt;Nesta seção, serão abordados, de maneira resumida e com referências para que vocês possam se aprofundar nos temas, alguns fundamentos que serão a base para a construção da aplicação em questão — um corretor ortográfico. Os temas serão:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Conjuntos e domínios de dados;&lt;/li&gt;
  &lt;li&gt;Espaços métricos e Árvores;&lt;/li&gt;
  &lt;li&gt;Distância de edição;&lt;/li&gt;
  &lt;li&gt;Árvores de BK;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;conjuntos-e-espaços-métricos&quot;&gt;Conjuntos e Espaços Métricos&lt;/h3&gt;

&lt;p&gt;Suponha um conjunto de dados com 1000 pontos 2D (x, y), &lt;strong&gt;amostra&lt;/strong&gt; a qual será chamada A, cujos valores de x e y variem entre 0 e 1([0,1]²), intervalo o qual pode ser chamado de &lt;strong&gt;domínio&lt;/strong&gt; (D).&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;random&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pandas&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pd&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;numpy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;generate_random_df_2d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x_size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DataFrame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;&quot;&quot; Generate a dataframe with dimensions 'x_size' and 'y_size' filled with
        random float numbers between 0 and 1
    &quot;&quot;&quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DataFrame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;random_sample&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x_size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Toda vez que um conjunto de objetos, seja o objeto numérico (como o os números inteiros ou reais) ou de outro tipo (palavras, imagens, etc.) ter uma métrica bem definida que pode ser associada, então este conjunto pode ser classificado como um espaço métrico.&lt;/p&gt;

&lt;h4 id=&quot;mas-o-que-significa-exatamente-a-tal-métrica&quot;&gt;Mas o que significa exatamente a tal métrica?&lt;/h4&gt;

&lt;p&gt;De uma perspectiva mais próximo da matemática, uma métrica existe quando os pontos de um conjunto satisfazem as seguintes condições:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A distância de um ponto para ele mesmo é zero (0);&lt;/li&gt;
  &lt;li&gt;A distância entre dois pontos distintos (A e B) quaisquer é sempre positiva;&lt;/li&gt;
  &lt;li&gt;A distância entre os pontos A e B é a mesma entre os pontos B e A;&lt;/li&gt;
  &lt;li&gt;A distância entre dois pontos A e B, medida diretamente, é sempre menor ou igual à distância medida entre A e B passando por um ponto C (o que está associado ao Teorema da Desigualdade Triangular, que será usado mais a frente);&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do ponto de vista mais intuitivo, uma métrica remete à distância entre dois pontos (ou objetos), como duas pessoas em uma praça (cuja distância pode ser medida em linha reta) ou duas localizações em uma cidade (cuja distância pode ser medida em linha reta ou através do trajeto a ser percorrido nas ruas). Entretanto, tal conceito também pode ser aplicado a tipos de objetos não muito comuns, como música (que tem métricas bem definidas) ou palavras, que possuem distância de edição entre si (que abordaremos em mais detalhes mais à frente).&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Vector_triangle_inequality.PNG/800px-Vector_triangle_inequality.PNG&quot; alt=&quot;Inequality triangle&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Figura ilustrando o Teorema da Desigualdade Triangular&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;distância-de-edição&quot;&gt;Distância de edição&lt;/h3&gt;

&lt;p&gt;A distância de edição entre duas strings é a contagem de operações que precisam ser realizadas para uma string transforme-se (ou torne-se igual) à outra, sendo que as operações possíveis são:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Inserção de novo caractere;&lt;/li&gt;
  &lt;li&gt;Remoção de caractere;&lt;/li&gt;
  &lt;li&gt;Substituição de caractere;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sendo assim, dado um conjunto de palavras ou sentenças (também chamado de corpus), é possível encontrar a distância de edição entre uma referência (que pode ser uma palavra qualquer de seu corpus). Abaixo segue um trecho simples de código para calcular a distância entre duas palavras:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# Install it by &quot;pip install python-Levenshtein&quot;
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Levenshtein&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;distance&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;calculate_distance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;str_1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;str_2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;&quot;&quot;&quot; Given two string, applies the Levenshtein's method to calculate the
      editon distance
  &quot;&quot;&quot;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;distance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;str_1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;str_2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;In [1]: calculate_distance(“motocicleta”, “bicicleta”) 
Out[1]: 4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;árvores-de-burkhard-keller-bk&quot;&gt;Árvores de Burkhard-Keller (BK)&lt;/h2&gt;

&lt;p&gt;As árvores BK são um tipo de árvore métrica dedicadas a espaços métricos discretos, ou seja, cujas distâncias entre os objetos do espaço são sempre números inteiros.&lt;/p&gt;

&lt;p&gt;Como exemplo, vamos pensar no espaço métrico que representa pontos em um mapa. Lembrando que todo espaço métrico possui uma métrica específica que o define, precisamos escolher muito bem qual a métrica a ser usada neste exemplo para que ele seja elegível à aplicação de uma árvore BK. Se escolhermos a distância Euclideana (linha reta entre dois pontos), teremos uma métrica cujos valores podem variar de maneira contínua, em outras palavras, números reais. Entretanto, se escolhermos como métrica o número de quarteirões a serem percorridos por inteiro, tal métrica terá apenas valores inteiros e teremos um espaço métrico discreto.&lt;/p&gt;

&lt;p&gt;Voltando à nossa aplicação de interesse, a distância de edição de Levenshtein é uma métrica discreta, pois o número de operações a serem realizadas para transforma uma palavra em outra é sempre um número inteiro. Com isso, o espaço métrico que representa um conjunto de palavras cuja distância entre si é calculada pela distância de Levenshtein é um espaço discreto e, portanto, pode ser representado por uma árvore BK.&lt;/p&gt;

&lt;p&gt;Para a construção da árvore propriamente dita, basta escolhermos um termo arbitrário (que chamarei de termo de referência) do corpus e calcular a distância de todos os outros termos com relação à referência, e organizar as tuplas (palavra, distância) como uma árvore indexada a partir da distância à referência.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;https://media.geeksforgeeks.org/wp-content/uploads/17555345_1350416661709467_503833975_n.png&quot; alt=&quot;BK Tree&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Ilustração de uma árvore BK a partir de algumas palavras em inglês&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Abaixo segue um trecho de código mostrando como criar e usar uma árvore BK a partir de: uma lista de palavras (strings) e uma métrica de distância de edição escolhida (Levenshtein).&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# pip install pybktree &amp;amp;&amp;amp; pip install python-Levenshtein
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pybktree&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BKTree&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Levenshtein&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;distance&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;levenshtein_distance&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;WORDS_LIST&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'car'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'house'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'jar'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'mouse'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'engineer'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'pioneer'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'Jamaica'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;tree&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BKTree&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;levenshtein_distance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;WORDS_LIST&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Se pedirmos a impressão ordenada da árvore, lembrando que o termo de referência dela é arbitrário, teremos uma lista de palavras ordenadas pelas distância de edição à primeira palavra da lista:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;In [1]: print(sorted(tree))
Out[1]: [‘Jamaica’, ‘car’, ‘engineer’, ‘house’, ‘jar’, ‘mouse’, ‘pioneer’]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;E se quisermos procurar quais palavras da árvore estão a uma distância de edição menor ou igual a 2 da palavra mouse, teremos como resultado uma lista de tuplas (distância, palavra) ordenadas pela distância:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;print(tree.find('mouse'), 2)
[(0, ‘mouse’), (1, ‘house’)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;como-isso-se-tornaria-em-um-corretor-ortográfico&quot;&gt;Como isso se tornaria em um corretor ortográfico?&lt;/h2&gt;

&lt;p&gt;Dado que agora temos uma árvore onde podemos procurar quaisquer palavras que sejam semelhantes a uma determinada referência, podemos então construir uma árvore com todas as palavras de uma determinada língua (o PT-BR, por exemplo, possui cerca de 381 mil verbetes) e, para cada palavra digitada, checar se existe uma palavra com distância zero (0) para ela e, caso não tenha, sugerir as palavras com menor distância de edição para tal. Simples, não é?&lt;/p&gt;

&lt;p&gt;Exemplificando, se eu estivesse escrevendo um texto em inglês e digitasse a palavra &lt;em&gt;gouse&lt;/em&gt;. Usando meu exemplo acima, eu poderia procurar as palavras com distância de edição até 3 e obteria o seguinte resultado:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;In [1]: tree.find(‘gouse’, 3) 
Out[1]: [(1, ‘house’), (1, ‘mouse’)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Como não foi encontrada nenhuma palavra com distância zero, eu assumiria que essa palavra está errada e sugeriria as palavras house e mouse como as prováveis palavras que deveriam ocupar este espaço.&lt;/p&gt;

&lt;p&gt;Obviamente esta é uma visão bastante simplificada de como resolver o problema, afinal existem diversos desafios periféricos à identificação de palavras não existentes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Engenharia:&lt;/strong&gt; percorrer árvores com centenas de milhares de nós em near-real-time. O algoritmo do “caixeiro viajante” é uma boa solução para varrer este tipo de estrutura;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Semântica:&lt;/strong&gt; se existem duas palavras com mesma distância, qual a que mais se encaixa no contexto? E se for um erro de digitação, qual das duas palavras estaria mais próxima no quesito “proximidade de teclas”?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Multi-idiomas:&lt;/strong&gt; só neste texto eu misturei uns 3 idiomas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entretanto, entender como o núcleo da solução funciona lhe permite entender melhor os desafios e como conectar esta solução com todas as funcionalidades e objetivos que você deseja alcançar ao desenvolver tal aplicação.&lt;/p&gt;

&lt;h1 id=&quot;referências&quot;&gt;Referências&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;https://en.wikipedia.org/wiki/Metric_space&lt;/li&gt;
  &lt;li&gt;https://pt.wikipedia.org/wiki/Desigualdade_triangular&lt;/li&gt;
  &lt;li&gt;https://www2.unifap.br/matematica/files/2017/01/Francinor-m%c3%a9trico-completos-e-teorema-de-Banach-steinhuas.pdf&lt;/li&gt;
  &lt;li&gt;http://www.ppgia.pucpr.br/~alceu/mestrado/edit_distance.pdf&lt;/li&gt;
  &lt;li&gt;https://en.wikipedia.org/wiki/BK-tree&lt;/li&gt;
  &lt;li&gt;https://pt.wikipedia.org/wiki/Problema_do_caixeiro-viajante&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Neste artigo vamos percorrer rapidamente sobre uma estrutura de dados bastante interessante (Árvores métricas) e como ela pode ser aplicada na vida real.</summary></entry><entry><title type="html">Aumente a visibilidade de AI adotando seu vocabulário no cotidiano</title><link href="https://wespatrocinio.github.io/management/artificial-intelligence/2020/01/29/aumente-a-visibilidade-de-ai-adotando-seu-vocabulario-no-cotidiano.html" rel="alternate" type="text/html" title="Aumente a visibilidade de AI adotando seu vocabulário no cotidiano" /><published>2020-01-29T00:00:00+00:00</published><updated>2020-01-29T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/management/artificial-intelligence/2020/01/29/aumente-a-visibilidade-de-ai-adotando-seu-vocabulario-no-cotidiano</id><content type="html" xml:base="https://wespatrocinio.github.io/management/artificial-intelligence/2020/01/29/aumente-a-visibilidade-de-ai-adotando-seu-vocabulario-no-cotidiano.html">&lt;p&gt;De maneira aproximada, estamos completando uma década desde que a tsunami tecnológica associada a &lt;em&gt;Data Science&lt;/em&gt;, &lt;em&gt;Machine Learning&lt;/em&gt;, Inteligência Artificial e afins atingiu o mundo corporativo. Abriram as portas dos laboratórios e vimos uma séries de pessoas, recursos e conceitos, que ficavam “confinados” no mundo acadêmico e/ou P&amp;amp;D, adentrarem o cerne das pequenas, médias e grandes empresas de maneira transformadora. E, por mais que a aceitação e entendimento destas áreas tenham evoluídos, ainda há bastante espaço para a otimização da exploração destas metodologias e tecnologias.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/terminator-be-back.gif&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Não é de hoje que a humanidade coloca sua esperança de sobrevivência sobre redes neurais.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No momento em que escrevo este texto, estou há 7 anos desenvolvendo e/ou aplicando &lt;em&gt;Data Science&lt;/em&gt;, &lt;em&gt;Machine Learning&lt;/em&gt;, AI e afins (que vou abreviar adiante como DS/ML/AI) no mundo corporativo, somados a outros anos de bagagem acadêmica e P&amp;amp;D. E, neste período, identifiquei dois grandes blocos desafiadores neste mercado: I) os desafios técnicos (contratações, plataformas, modelos, etc.) e II) a integração de áreas de DS/ML/AI à estratégia &amp;amp; tática da empresa. Neste artigo eu vou explorar um ponto fundamental no item II citado a pouco.&lt;/p&gt;

&lt;h2 id=&quot;reflexão-sobre-linguagem-instrumentação-e-interpretação-de-conceitos&quot;&gt;Reflexão sobre linguagem, instrumentação e interpretação de conceitos&lt;/h2&gt;

&lt;p&gt;Se você, que está lendo, já foi exposto a um ambiente onde todas as demais pessoas são proficientes em determinados que você não conhece, deve ter pensado (ou até falado) algumas vezes: “estas pessoas estão falando “grego” e eu não estou entendendo nada”. Este tipo de situação já foi bastante comum em iniciativas de DS/ML/AI há alguns anos, pois os profissionais da área estavam ventilando conceitos e fundamentos que não eram de conhecimento comum (geralmente técnicos), enquanto estas mesmas pessoas não eram familiares ao mundo corporativo e seu modo de funcionar.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/what.gif&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Wat?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Atualmente, os profissionais da área já estão mais “educados” pelo mundo corporativo porém o “tecniquês” ainda é usando por muitos DS/ML/AI por alguns motivos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ego inflado (simples assim);&lt;/li&gt;
  &lt;li&gt;Mecanismo de defesa, pois se as pessoas ao redor não entendem exatamente o que o DS/ML/AI está propondo, tem menor poder de questionamento sobre o tema;&lt;/li&gt;
  &lt;li&gt;Falta de empatia com as pessoas ao redor;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entretanto, o uso demasiado de termos muito específicos dos conceitos e fundamentos associados a DS/ML/AI, sem a devida evangelização, causa um problema de comunicação entre os times pois não há uma linguagem comum entre tais e, pasmem, o uso de linguagens diferentes entre dois grupos podem gerar um impacto profundo no cotidiano da convivência dentro das empresas: uma má exploração deste tipo de recurso.&lt;/p&gt;

&lt;h2 id=&quot;linguagem-como-instrumento&quot;&gt;Linguagem como instrumento&lt;/h2&gt;

&lt;p&gt;Para explicar o impacto do uso de diferentes linguagens, eu vou abordar de maneira resumida (até porque não tenho muitas condições de ir além disso) alguns conceitos de linguística e cognição, além de dados de um experimento muito interessante para validar algumas teorias associadas.&lt;/p&gt;

&lt;p&gt;A linguagem é um instrumento para que tenhamos a difusão de conhecimento para um determinado grupo/comunidade. Quando um conceito novo surge na sociedade, ele ganha potência de difusão quando são estabelecidos termos específicos e únicos para descreve-lo. Entretanto, quando não existem tais termos para os grupos, há uma grande dificuldade na identificação e entendimento daquele conceito.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/talking-heads.png&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;“You’re talking a lot, but you’re not saying anything”.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No século XIX, William Gladstone, um intelectual e político britânico, identificou que nas obras de Homero e de outros autores da Grécia antiga não havia a menção à cor azul. Tal descoberta inspirou outros pesquisadores, que identificaram um comportamento semelhante em outras culturas, até que o &lt;a href=&quot;https://www.bbc.com/portuguese/noticias/2016/02/160221_civilizacoes_antigas_cor_azul_rb&quot;&gt;psicólogo Jules Davidoff fez experimentos&lt;/a&gt; em uma tribo na Namíbia (país africano), cuja linguagem não possui uma palavra para a cor azul, mas possui vários termos para diferentes tons de verde. Ele mostrava 11 quadrados verdes e 1 azul para as pessoas e questionava qual era o quadrado diferente, porém eles não foram capazes de identificar. Ao trocar o quadrado azul por um tipo diferente de verde, as pessoas identificaram instantaneamente.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/himba-color.png&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Palavras que descrevem as diferentes cores no dialeto Himba, na Namíbia. Note que o termo ‘buru’ descreve um tom verde e um azul..&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;projeção-para-o-mundo-corporativo&quot;&gt;Projeção para o mundo corporativo&lt;/h2&gt;

&lt;p&gt;Projetando a linguagem como instrumento de difusão e interpretação para o mundo corporativo e as interações com DS/ML/AI, a utilização de termos específicos da área e que não fazem parte do vocabulário dos demais grupos fazem com que ocorra má interpretação ou até certa “invisibilidade” sobre a contribuição que estes novos conceitos pode dar às iniciativas entre equipes diferentes (o que em tempos de metodologias Lean e Agile é praticamente mandatório), aumentando a fricção nas interações e diminuindo o potencial da exmploração de DS/ML/AI pelas empresas.&lt;/p&gt;

&lt;h2 id=&quot;o-que-devemos-fazer-ao-saber-disso&quot;&gt;O que devemos fazer ao saber disso?&lt;/h2&gt;

&lt;p&gt;Sabendo disso, tenho algumas dicas para mitigar este tipo de problema na empresa/instituição com a qual você colabora (e elas funcionam para todas as posições e/ou senioridade):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Tenha mais empatia pelo público-alvo do seu discurso e tente, quando possível, traduzir os termos específicos de DS/ML/AI para descrições mais comuns a outros contextos;&lt;/li&gt;
  &lt;li&gt;Evangelize a terminologia de DS/ML/AI para a empresa e sugira conteúdo introdutório para as pessoas que terão interação direta com tais times (ninguém precisa ser necessariamente phD em Ciência da Computação ou Estatística para conseguir entender e tirar proveito dos conceitos). Cursos como o &lt;a href=&quot;https://www.coursera.org/learn/ai-for-everyone/&quot;&gt;&lt;em&gt;AI for Everyone&lt;/em&gt;&lt;/a&gt;, do Andrew Ng, são ideias para este propósito;&lt;/li&gt;
  &lt;li&gt;Não caia na famosa “Lei da ferramenta” de Maslow (abaixo) e ache que DS/ML/AI é a bala de prata para resolver todos os problemas. Lembre-se que nas demais equipes existem pessoas tão inteligentes quanto a sua equipe, porém que dominam técnicas diferentes e que podem ter “poderes” que você ainda não conhece e/ou sabe explorar;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Eu suponho que é tentador, se a única ferramenta que você tem é um martelo, para tratar tudo como se fosse um prego”. (Abraham Maslow)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;referências&quot;&gt;Referências&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;https://www.youtube.com/watch?v=kdHmy0_Rkcw&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Se você pretende ter este tipo de tecnologia em seu dia-a-dia, é muito importante que todos ao seu redor saibam falar sobre ela.</summary></entry><entry><title type="html">Não incentive o _Night Hero_ em seu time</title><link href="https://wespatrocinio.github.io/management/2020/01/27/nao-incentive-o-night-hero-em-seu-time.html" rel="alternate" type="text/html" title="Não incentive o _Night Hero_ em seu time" /><published>2020-01-27T00:00:00+00:00</published><updated>2020-01-27T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/management/2020/01/27/nao-incentive-o-night-hero-em-seu-time</id><content type="html" xml:base="https://wespatrocinio.github.io/management/2020/01/27/nao-incentive-o-night-hero-em-seu-time.html">&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/batman-robin-west.jpeg&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Macacos me mordam! As APIs estão indisponíveis novamente, Batman!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Em tempos de trabalho remoto, ambientes digitais acessíveis de qualquer lugar e comunicação &amp;amp; trabalho assíncronos, eu vejo o surgimento de um novo tipo de profissional, principalmente em times de tecnologia, no qual vejo muitos riscos: o &lt;em&gt;Night Hero&lt;/em&gt; (o qual chamarei carinhosamente de NH neste texto). O profissional que estou chamando de NH é a pessoa que está sempre disponível, não importa o dia e horário que a demanda apareça. É 24/7 em alerta, trabalhando aos domingos a noite para garantir que a segunda estará operante, que está sempre alerta para os incidentes e desastres, etc.&lt;/p&gt;

&lt;h2 id=&quot;uma-breve-análise-sobre-esforço-vs-eficácia&quot;&gt;Uma breve análise sobre esforço VS eficácia&lt;/h2&gt;

&lt;p&gt;Em times de tecnologia, é comum que estas figuras tornem-se mais evidentes em áreas de Desenvolvimento, Infraestrutura/DevOps e Suporte. Em todo tipo de acidente/incidente, o NH está lá presente trabalhando na sustentação, mandando e-mails, interagindo com pessoas em outros fusos horários, etc., enquanto deveria estar dormindo, junto com a família, praticando atividades físicas, entre outros. Tanto faz se o problema foi causado por algo feito pelo próprio NH ou por alguém que não tem nenhuma relação direta com ele. E é nesta hora que entra uma análise bastante pertinente a este tipo de situação: esforço VS eficácia.&lt;/p&gt;

&lt;p&gt;O que eu espero de uma pessoa, no aspecto profissional, é que ela trabalhe com a máxima eficácia possível sobre o pacote de trabalho acordado por ambas as partes (sejam horas semanais, prazos de entrega, metas, etc.). Entretanto, se a quantidade de esforço para cumprir determinado acordo é muito maior do que o esperado, duas suspeitas óbvias surgem instantâneamente: o tamanho do pacote de trabalho foi subestimado e/ou a eficácia da pessoa a executar o trabalho foi superstimada.&lt;/p&gt;

&lt;h2 id=&quot;o-reconhecimento-fomenta-o-comportamento-seja-ele-saudável-ou-nocivo&quot;&gt;O reconhecimento fomenta o comportamento, seja ele saudável ou nocivo&lt;/h2&gt;

&lt;p&gt;Voltando para o &lt;em&gt;Night Hero&lt;/em&gt;, na maior parte dos casos que presenciei e convivi, a causa principal foi a combinação (explosiva) entre uma alta carga de trabalho com uma pessoa com maiores níveis de ansiedade. E ao identificar este cenário, eu, como gestor, entendo que o ideial seria executar ações que i) reduza a carga de trabalho e/ou ii) ajuste os níveis de ansiedade da pessoa. Porém, o que vejo com certa frequência é uma terceira ação: o reconhecimento ($, faz-me-rir, tutu, etc.) dessa pessoa.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/fogueira-gestao.png&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Ao reconhecer uma pessoa por um comportamento específico (de maneira implícita ou explícita), você está fomentando a continuade ou até aumentando a intensidade do mesmo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ao meu ver, o reconhecimento deste tipo de comportamento é um fomento para que ele torne-se latente, ao invés de um mecanismo de desenvolvimento do profissional. Idealmente, o desenvolvimento deveria ser guiado pela gestão de iniciativas que ajudem a mitigar as causas que levaram a este esforço excessivo por parte do NH, aumentando a eficácia do profissional e da equipe.&lt;/p&gt;

&lt;p&gt;Isso não impede que o gestor seja grato ao esforço extra feito pela pessoa, ou o reconhecimento por ela alcançar as metas que, de alguma maneira, exigiram aquele esforço.Entretanto, o reconhecimento ao puro e simples esforço é algo que pode ser bastante nocivo por alguns motivos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ao saber que sempre existe alguém disponível para atuar em problemas, pessoas do time podem perder compromisso com práticas preventivas e aumentar a ocorrência de incidentes, sobrecarregando ainda mais o NH;&lt;/li&gt;
  &lt;li&gt;Toda pessoa sobrecarregada pode ser induzida a tomar más decisões e/ou cometer erros técnicos, o que, geralmente, aumenta a quantidade de re-trabalho e a ocorrência de incidentes. Ou seja, aumenta a sobrecarga no NH e do restante do time;&lt;/li&gt;
  &lt;li&gt;Altos níveis de ansiedade e estresse podem causar danos à saúde das pessoas envolvidas, os quais podem graves(quem nunca ouviu a &lt;a href=&quot;https://www1.folha.uol.com.br/sobretudo/carreiras/2018/05/1969024-sobrecarga-combinada-a-frustracao-profissional-pode-causar-curto-cicuito.shtml&quot;&gt;história da pessoa que infartou no escritório depois de um período de alta carga de trabalho&lt;/a&gt;?);&lt;/li&gt;
  &lt;li&gt;As metas associadas à ações preventivas e/ou avaliação da contratação de mais pessoas para o time podem ser despriorizadas, pois o time possui uma “segurança” na sustentação do time feita pelo &lt;em&gt;Night Hero&lt;/em&gt;;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;o-que-eu-penso-que-devo-fazer-neste-tipo-de-situação&quot;&gt;O que eu penso que devo fazer neste tipo de situação?&lt;/h2&gt;

&lt;p&gt;Dado este cenário, as minhas dicas, como gestor, de como agir ao identifica um &lt;em&gt;Night Hero&lt;/em&gt; são:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;No curto prazo, puxe o time para a realização de post-mortem dos incidentes de forma a envolver e conscientizar todas as pessoas das causas, dos impactos do incidente (dando ênfase à dedicação extra do NH) e das ações para mitigar os riscos identificado. Sugiro também conversar 1:1 com o NH para deixar claro que não é interessante ter aquele tipo de atuação como rotina e induzi-lo a compensar as horas a mais já nos dias seguintes;&lt;/li&gt;
  &lt;li&gt;No médio prazo, priorize ações preventivas baseadas nos riscos identificados e divida a responsabilidade de execução de tais ações com todo o time. É importante que o máximo de pessoas possível compartilhe os riscos do contexto em que trabalham, assim os esforços e ansiedades também são compartilhados;&lt;/li&gt;
  &lt;li&gt;No longo prazo, planeje recursos e investimento para deixar o cotidiano/operacional de sua equipe mais robusto e com menos riscos, de forma a ter um dia-a-dia mais saudável em sua equipe e operação;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero que esta reflexão lhes seja útil.&lt;/p&gt;

&lt;p&gt;Um abraço!&lt;/p&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Neste artigo vamos falar um pouco sobre alguns conceitos básicos da Teoria do Aprendizado Estatístico e como isso é importante no dia-a-dia de um _Data Scientist_.</summary></entry><entry><title type="html">Data Science é metodologia, e não tecnologia</title><link href="https://wespatrocinio.github.io/data-science/management/2017/07/25/data-science-e-metodologia-e-nao-tecnologia.html" rel="alternate" type="text/html" title="Data Science é metodologia, e não tecnologia" /><published>2017-07-25T00:00:00+00:00</published><updated>2017-07-25T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/data-science/management/2017/07/25/data-science-e-metodologia-e-nao-tecnologia</id><content type="html" xml:base="https://wespatrocinio.github.io/data-science/management/2017/07/25/data-science-e-metodologia-e-nao-tecnologia.html">&lt;p&gt;Assim como P&amp;amp;D (Pesquisa e Desenvolvimento), &lt;em&gt;Data Science&lt;/em&gt; sofre com o desbalanço entre as ponderações dos termos. Em P&amp;amp;D, o Desenvolvimento tem um peso muito mais forte que Pesquisa. Em &lt;em&gt;Data Science&lt;/em&gt;, o &lt;em&gt;Data&lt;/em&gt; ganhou muito mais peso e dominou as falácias de corredores e &lt;em&gt;Meetups&lt;/em&gt;. Porém não se engane: &lt;em&gt;we’re talking about Science, bitch&lt;/em&gt;!&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/emmet-brown.jpg&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;O estereótipo das pessoas sobre os Cientistas.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A Ciência de Dados é constituída de princípios fundamentais que norteiam a extração de conhecimento a partir de dados (assim como Ciências Naturais — como Física e Química) extraem conhecimento de fenômenos naturais. Sendo assim, &lt;em&gt;data mining&lt;/em&gt;, &lt;em&gt;machine learning&lt;/em&gt; e estatística são ferramentas usadas para a extração de conhecimento de um domínio de dados. De maneira mais franca, o que eu quero dizer é que existe &lt;em&gt;Data Science&lt;/em&gt; sem &lt;em&gt;Machine Learning&lt;/em&gt; e vice-versa, ou seja, um Cientista de Dados não é necessariamente um Engenheiro de &lt;em&gt;Machine Learning&lt;/em&gt; e vice-versa.&lt;/p&gt;

&lt;p&gt;Entretanto, como este é um termo do mundo dos negócios, a Ciência de Dados trouxe também a responsabilidade de automatizar e sistematizar tal extração de conhecimento para tomadas de decisão, de forma a substituir o modelo tradicional de um time de analistas olhando para dados e opiniões para extrair algum conhecimento. Atualmente existem dois cenários macro de aplicações de tomadas de decisão orientada por dados, usando os princípios de &lt;em&gt;Data Science&lt;/em&gt;: (1) as descobertas realizadas a partir de dados e (2) decisões repetitivas e em grande escala. O caso (1) está mais próximo do que hoje é chamado de &lt;em&gt;Advanced Analytics&lt;/em&gt;, onde a empresa adquiri novas informações apenas “olhando” para os dados. Grandes exemplos deste formato estão no Walmart, como o caso do furacão Frances e as associações de compra entre fraldas e cervejas e a mudança da disposição dos produtos em suas lojas físicas. Já o caso (2) pode ser representando pelos sistemas de recomendação, onde a própria aplicação decide automaticamente quais produtos deve exibir para o usuário.&lt;/p&gt;

&lt;p&gt;Este ponto de vista metodológico de &lt;em&gt;Data Science&lt;/em&gt; ajuda na sua desambiguação de &lt;em&gt;Big Data&lt;/em&gt; e &lt;em&gt;Data Engineering&lt;/em&gt;. Estes últimos são áreas complementares que viabilizam o uso de dados para aprendizado e decisões, porém não fazem parte necessariamente do processo de aprendizado e decisões. Ocasionalmente, tecnologias e técnicas de &lt;em&gt;Big Data&lt;/em&gt; e &lt;em&gt;Data Engineering&lt;/em&gt; são utilizadas na implementação de exploração e mineração de dados. Eu vejo um jeito simples de separar os conceitos: as respostas da pergunta “o que eu preciso fazer para ser capaz de acessar e processar todos os meus dados?” são iniciativas de &lt;em&gt;Big Data&lt;/em&gt; e &lt;em&gt;Data Engineering&lt;/em&gt;. Já as respostas de “o que eu consigo aprender ou fazer melhor a partir dos meus dados?” se enquadram no contexto de &lt;em&gt;Data Science&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Esta mescla técnica entre engenharia e ciência existe em todos os contextos. Um cientista da computação precisa saber programar, um físico precisa saber construir experimentos, assim como um químico precisa saber como operar instrumentos e equipamentos de um laboratório. Dessa forma, um cientista de dados precisa saber técnicas de manuseio de dados para realizar o seu trabalho, seja construindo aplicações para cenários particulares ou utilizados ferramentas já prontas. Além disso, lembrando da responsabilidade “brinde” de sistematizar e automatizar suas tarefas, conhecimento de arquitetura de sistemas e produtos são muito úteis e bem-vindas (embora não seja requisitada por e para todos).&lt;/p&gt;

&lt;p&gt;Já uma mescla que continua carente em dias atuais é a de gestores que compreendem de maneira clara o que é &lt;em&gt;Data Science&lt;/em&gt; e como ela deve ser executada. Empresas cujos gestores não compreendem este assunto perdem tempo e dinheiro por decisões erradas, seja por recrutar as pessoas com perfil inadequado ou então por decisões erradas com base em projetos mal estruturados. Uma empresa que deseja ter sucesso aplicando esta metodologia deve tratar &lt;em&gt;Data Science&lt;/em&gt; como um ativo estratégico, investindo de ponta a ponta (desde coleta de dados, passando por engenheiros e cientistas até chegar na camada de gestão). No final das contas, a implantação desta metodologia terá forte impacto nos processos e na cultura da empresa, que junto às pessoas formam a espinha dorsal de uma organização.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Este artigo foi inspirado em alguns insights obtidos com a leitura do livro Data Science for business (Foster Provost &amp;amp; Tom Fawcett).&lt;/em&gt;&lt;/p&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Neste artigo vamos falar um pouco sobre o significado de _Data Science_ e como eu diferencio está área de outras áreas de dados.</summary></entry><entry><title type="html">_Statistical Learning Theory_ — você deveria usar mais do que imagina</title><link href="https://wespatrocinio.github.io/data-science/statistics/2017/07/25/statistical-learning-theory.html" rel="alternate" type="text/html" title="_Statistical Learning Theory_ — você deveria usar mais do que imagina" /><published>2017-07-25T00:00:00+00:00</published><updated>2017-07-25T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/data-science/statistics/2017/07/25/statistical-learning-theory</id><content type="html" xml:base="https://wespatrocinio.github.io/data-science/statistics/2017/07/25/statistical-learning-theory.html">&lt;p&gt;Tem aumentado a frequência em que eu escuto profissionais e simpatizantes de &lt;em&gt;Data Science&lt;/em&gt; minimizando (ou até desprezando) a importância de conhecimento em Estatística para a criações de soluções baseadas em Inteligência Artificial e/ou &lt;em&gt;Machine Learning&lt;/em&gt;. Isso sempre me remete a mesma preocupação com relação a uma etapa importante da modelagem e que está cada vez mais sendo negligenciada: a validação de algumas premissas necessárias para que ocorra aprendizado supervisionado em um domínio de dados.&lt;/p&gt;

&lt;p&gt;Por conta disso, eu gostaria de trazer à tona alguns conceitos básicos de &lt;em&gt;Statistical Learning Theory&lt;/em&gt; que abordam algumas premissas que um bom conjunto de dados pode ter para que uma seja possível a construção preditiva baseada em dados, ou seja, para garantir que um algoritmo será capaz de aprender corretamente.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/tirinha-bias.gif&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;http://letterstoayounglibrarian.blogspot.com/2016/04/on-bias.html&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Usando uma linguagem mais cotidiana, estamos falando do famoso &lt;em&gt;BIAS&lt;/em&gt;, que ocorre quando uma de suas variáveis contém a distribuição de probabilidade de seu alvo. Por exemplo, se você está tentando prever se uma pessoa é completamente careca ou não, ter uma variável que contém o número de fios de cabelo que cada indivíduo tem incluirá a distribuição de carecas no treinamento, dado que o fator que determina a classe do indivíduo é ele ter fios de cabelo ou não. Portanto, seu algoritmo lhe fornecerá um diagnóstico, e não uma previsão.&lt;/p&gt;

&lt;p&gt;Para mitigar tal tipo de problema, uma análise de covariância ou de dependência linear entre suas variáveis e seu alvo podem lhe ajudar a identificar a ocorrência de &lt;em&gt;BIAS&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;a-distribuição-de-probabilidade-de-seu-alvo-deve-ser-estática&quot;&gt;A distribuição de probabilidade de seu alvo deve ser estática&lt;/h2&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/static-tv.jpg&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;https://www.slashgear.com/one-percent-of-tv-static-originates-from-the-big-bang-24492754/&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Em outras palavras, quero dizer que seus dados não podem ter dependência temporal dentro das condições de contorno de seu problema. Caso não seja, seu algoritmo aprenderá a construir uma função de predição que não será mais a mesma após determinado intervalo de tempo, e haverá degradação de seu poder de predição.&lt;/p&gt;

&lt;p&gt;Para casos de variação temporal dentro de suas condições de contorno, abordagens como Séries Temporais são mais adequadas.&lt;/p&gt;

&lt;h2 id=&quot;as-amostras-usadas-para-aprendizado-devem-representar-todo-o-seu-espaço-amostral&quot;&gt;As amostras usadas para aprendizado devem representar todo o seu espaço amostral&lt;/h2&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/diversity.jpg&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;https://www.theodysseyonline.com/5-reasons-why-representation-matters&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ao escolher um conjunto de elementos para construir uma amostra de seu domínio de dados, você deve garantir que todo o seu espaço está representado por tais amostras, ou seja, de que existem amostras de todas as regiões de seu espaço e que a proporcionalidade dos grupos contidos neles também é mantida.&lt;/p&gt;

&lt;p&gt;Imagine que você está na fila de um banco com outras 100 pessoas (que baita fila) e queira criar um grupo de indivíduos que represente todas as pessoas que ali estão. No final de sua amostragem, temos 10 indivíduos: 2 crianças de até 10 anos, 5 mulheres entre 25 e 35 anos, 3 homens entre 18 e 25 anos. Esta amostra lhe diria que:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;20% das pessoas na fila são crianças;&lt;/li&gt;
  &lt;li&gt;Não existem idosos na fila do banco;&lt;/li&gt;
  &lt;li&gt;Há quase o dobro de mulheres na fila se comparadas aos homens;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entretanto, se você olhar o espaço como um todo pode perceber que o espaço completo não está sendo bem representado, pois existiam idosos na fila, e as 2 crianças na amostra na verdade eram as duas únicas crianças em toda a fila. Este tipo de situação pode acontecer por três motivos principais:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Uma amostragem feita de maneira não aleatória;&lt;/li&gt;
  &lt;li&gt;Uma amostragem aleatória, porém com uma quantidade pequena o suficiente para não considerar alguns grupos minoritários contidos no espaço;&lt;/li&gt;
  &lt;li&gt;Diferença entre as condições de contorno (ou segmentação) que definem o espaço completo e o amostral;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para evitar tal tipo de situação, analisar a variância de sua amostra e compara-la com a mesma métrica do espaço completo pode lhe ajudar a evitar tal tipo de situação.&lt;/p&gt;

&lt;h2 id=&quot;as-amostras-devem-ser-independentes-entre-si&quot;&gt;As amostras devem ser independentes entre si&lt;/h2&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/porta-esperanca.png&quot; alt=&quot;&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;https://brilliant.org/practice/conditional-probability-in-quant-finance/&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ao desenhar sua amostragem, os indivíduos de seu espaço amostral não podem ter dependência entre si, ou seja, a probabilidade de um evento acontecer para uma indivíduo não pode ser condicional a outro indivíduo ou então exigir que seu espaço amostral contenha determinados indivíduos.&lt;/p&gt;

&lt;p&gt;Um bom exemplo é a boa e velha predição de churn. Suponha que você trabalha com um produto cujo modelo de negócio é uma assinatura mensal que permite uma estrutura de titular e dependentes do plano. Ao tentar modelar sua predição tendo como alvo o churn de um usuário, automaticamente você terá dependência condicional em seu espaço, já que a assinatura, alterações contratuais e cancelamentos ocorrerão sobre todos os usuários que estão contidos em uma conta.&lt;/p&gt;

&lt;p&gt;Em termos mais técnicos, tal condicionamento é ruim para o aprendizado pois a sua distribuição de probabilidade do alvo dependerá de escolhas específicas de sua amostragem. Para evitar tal tipo de situação, você deve identificar muito bem qual é a melhor representação para o indivíduo de seu espaço (que no exemplo acima seria uma conta, e não um usuário).&lt;/p&gt;

&lt;h2 id=&quot;seu-alvo-pode-ter-ruído&quot;&gt;Seu alvo pode ter ruído&lt;/h2&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/the-germs.jpg&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;The Germs: ruído de qualidade - http://www.latimes.com/entertainment/arts/miranda/la-et-cam-slash-magazine-book-exhibition-20160719-snap-story.html&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Por último, mas não menos importante, vem o fato de que seu alvo, representado pela classe/valor alvo de cada indivíduo em seu espaço amostral, pode ter ruído, ou seja, erros de classificação no ground truth, desde que sejam minoritários.&lt;/p&gt;

&lt;p&gt;Este item é importante pois é muito comum que alguns profissionais, durante a validação da qualidade dos dados e variáveis, encontre certo ruído e sintam-se tentados a remover os indivíduos ruidoso de seu espaço amostral. Ao fazer isso, você estará alterando as características de seu espaço e impactando as capacidades de seu modelo. Muito provavelmente você terá que processar novas entradas que possuem este perfil problemático (por exemplo, erros em sistemas de cadastro feitos manualmente) sem ter permitido que seu modelo tivesse amostras desse perfil em seu conjunto de dados de treinamento. Lembrando que a premissa é que tal ruído seja minoritário e será tratado como tal pela predição.&lt;/p&gt;

&lt;p&gt;Repare que todos os pontos abordados acima estão diretamente relacionados a conceitos estatísticos (e a maior parte deles não muito avançados). Sendo assim, se você não enxerga a importância de tais conceitos em seu dia-a-dia, pode ser que algumas etapas importantes de seu trabalho estejam sendo negligenciadas.&lt;/p&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Neste artigo vamos falar um pouco sobre alguns conceitos básicos da Teoria do Aprendizado Estatístico e como isso é importante no dia-a-dia de um _Data Scientist_.</summary></entry><entry><title type="html">Precisamos falar mais sobre metas em Data Science</title><link href="https://wespatrocinio.github.io/data-science/management/2017/07/10/precisamos-falar-mais-sobre-metas-em-data-science.html" rel="alternate" type="text/html" title="Precisamos falar mais sobre metas em Data Science" /><published>2017-07-10T00:00:00+00:00</published><updated>2017-07-10T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/data-science/management/2017/07/10/precisamos-falar-mais-sobre-metas-em-data-science</id><content type="html" xml:base="https://wespatrocinio.github.io/data-science/management/2017/07/10/precisamos-falar-mais-sobre-metas-em-data-science.html">&lt;p&gt;Eu classifico 2017 como o ano da popularização de iniciativas de &lt;em&gt;Data Science&lt;/em&gt; no mercado brasileiro, seja pelo surgimento ou melhoria de ferramentas que catalizam as iniciativas (como os serviços e bibliotecas de AWS, Google, Microsoft, IBM, etc.), pelo aumento do número de profissionais engajados e qualificados na área ou pelo aprendizado que a camada de gestão de negócios teve nos últimos anos neste contexto. O fato é que vemos empresas de diversos tamanhos e segmentos “espremendo” dados para extrair valor de diversas formas.&lt;/p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;/assets/images/moises.jpg&quot; alt=&quot;Moises&quot; class=&quot;align-center&quot; /&gt;
&lt;em&gt;Moisés e seu cajado de METAS dividindo um mar de falácias sobre Data Science.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Os últimos anos de evolução deste mercado também ajudaram a definir melhor os papéis e fundamentos envolvidos. &lt;em&gt;Data Science&lt;/em&gt; tornou-se um conceito definitivamente genérico e suas aplicações (AI e &lt;em&gt;Advanced Analytics&lt;/em&gt;, por exemplo) e principais ferramentas (&lt;em&gt;Machine Learning&lt;/em&gt;, &lt;em&gt;Deep Learning&lt;/em&gt;, Engenharia de Dados, etc.) tomaram corpo dentro das empresas e cursos/conteúdo de capacitação. Hoje vemos cursos, vagas e cargos muito mais definidos e o mito dos Cientistas de Dados unicórnios (ou “carregadores de piano”, na minha visão) sendo desconstruído. Além disso, surgiram equipes e empresas com foco em desenvolver tecnologia específica para determinados domínios de dados, enquanto outras se especializaram na integração de stacks de negócios já existentes com tais tecnologias específicas.&lt;/p&gt;

&lt;p&gt;Neste mercado “atualizado”, eu vejo um divisor de águas que separa as iniciativas que tem um retorno positivo de seus investimentos das que falham neste sentido: a maturidade em determinar qual o objetivo específico da iniciativa, para os íntimos: metas bem definidas! Como há um amplo universo de possibilidades de exploração e geração de valor, direções bem definidas ajudam a convergir esforços e mentalidade para um objetivo comum e bem estabelecido. Uma iniciativa deve ser construída a partir de um propósito, e não a partir das atividades.&lt;/p&gt;

&lt;p&gt;Vou me explicar melhor. Imagine que um &lt;em&gt;Data team&lt;/em&gt; — com seus cientistas, engenheiros, estrategistas, etc. — seja uma equipe de arqueologia. De maneira muito macro, as atividades principais de um time de arqueologia são escavar o solo, procurar “objetos” e fragmentos, identifica-los, categoriza-los e reconstituir um objetos. Se um time de arqueologia é montado sem nenhum objetivo bem estabelecido, eles terão que estar preparados para:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ter técnicas e ferramentas para escavar qualquer tipo de solo (arenoso, rochoso, argiloso, etc.);&lt;/li&gt;
  &lt;li&gt;Procurar por todo e qualquer objeto e fragmento, de fósseis a garrafas de vidro;&lt;/li&gt;
  &lt;li&gt;Identificar, categorizar e reconstruir fragmentos de qualquer coisa, exigindo que sejam conhecidas estruturas desde animais em extinção, vasos Astecas e simples rochas;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dessa forma, será extremamente difícil encontrar profissionais que tenham tamanha amplitude de conhecimento, investir em anos de capacitação que deem tamanho conhecimento para a equipe e adquirir um grande número de ferramentas que viabilize tudo isso. Além disso, há o risco de cada profissional “andar” em uma direção diferente, fazendo com que a equipe e, consequentemente, a iniciativa não cheguem a lugar algum.&lt;/p&gt;

&lt;p&gt;Exatamente a mesma situação dos arqueólogos acontece com uma iniciativa &lt;em&gt;data-driven&lt;/em&gt;. Se um objetivo não é estabelecido, fica extremamente difícil encontrar profissionais capacitados, manter um time engajado ter um projeto de sucesso e obter retorno de seus investimentos. Devemos também sempre ter em mente que o termo &lt;em&gt;Data &lt;strong&gt;Science&lt;/strong&gt;&lt;/em&gt; contempla a abordagem científica de um problema, e a aplicação das metodologias científicas é que levarão a respostas com menor de teor de bias e maior grau de determinismo possível.&lt;/p&gt;

&lt;p&gt;Resumindo a ópera em uma sugestão: defina muito bem o propósito e os objetivos detalhados de sua iniciativa de &lt;em&gt;Data Science&lt;/em&gt; &lt;strong&gt;antes&lt;/strong&gt; de dar os primeiros passos concretos (contratação de time, alocação de &lt;em&gt;budget&lt;/em&gt;, etc.). Isso vai lhe economizar tempo e dinheiro e aumentar a chance de sucesso de sua iniciativa.&lt;/p&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Neste artigo vamos falar um pouco sobre a importância de metas para uma iniciativa de _Data Science_ e que riscos podem ser mitigados com isso.</summary></entry><entry><title type="html">Por que precisamos de planejamento?</title><link href="https://wespatrocinio.github.io/management/2015/10/13/por-que-precisamos-de-planejamento.html" rel="alternate" type="text/html" title="Por que precisamos de planejamento?" /><published>2015-10-13T00:00:00+00:00</published><updated>2015-10-13T00:00:00+00:00</updated><id>https://wespatrocinio.github.io/management/2015/10/13/por-que-precisamos-de-planejamento</id><content type="html" xml:base="https://wespatrocinio.github.io/management/2015/10/13/por-que-precisamos-de-planejamento.html">&lt;p&gt;Quem tem vivência no mundo corporativo já passou por vários eventos (reuniões, treinamentos, feiras, fóruns, etc) relacionados a planejamento. Planejamentos podem ser massantes, incompletos, inúteis, entre outros atributos negativos, porém há um consenso de que é necessário. E por que?&lt;/p&gt;

&lt;p&gt;Existem dois pontos de vista sobre a importância de um planejamento (de preferência bem feito): o corporativo e o individual. O corporativo é extensamente discutido pelas diversas metodologias e consultorias que exercitam tal processo junto às empresas. Eu gostaria de discorrer um pouco sobre o impacto de um planejamento no cotidiano de um indivíduo.&lt;/p&gt;

&lt;p&gt;Ao contrário do que muitos pensam, um plano de ação não serve para que você avalie se está fazendo a coisa certa, ou quão distante está de alcançar uma meta / objetivo. O papel principal do planejamento é dar segurança a uma pessoa, seja no momento de executar uma tarefa ou de tomar uma decisão. Mas a palavra importante é segurança!&lt;/p&gt;

&lt;p&gt;Imagine o cenário onde você fará uma longa viagem de férias, de carro, com sua família, incluindo crianças. Se você é uma pessoa precavida, você pensará na rota a ser realizada, rotas alternativas, pontos de paradas, Waze para lhe alertar sobre o trânsito e perspectiva de chegada, água, comida, revisão do carro, se o destino está dentro do alcance do seu seguro, etc. Ou seja, você tem em mãos um panorama da situação, sabe onde quer chegar e tem um plano detalhado de como deve executar sua viagem, plano de contingência e suporte disponível. Resumindo, você tem um bom plano de viagem.&lt;/p&gt;

&lt;p&gt;Se sua viagem seguir exatamente como o planejado, você não verá muito valor no planejamento proriamente dito. Como tudo correu bem, o seu plano foi apenas um script para ser executado e sua viagem ficou mais mecânica pois não foi necessário tomar decisões ou fazer atividades extras durante o percurso. Apenas seguir o script. Entretanto, se algo der errado, como uma criança com muita vontade de ir ao banheiro, pane no carro, etc, o seu planejamento de viagem bem feito lhe dará alternativas para solucionar o problema de maneira rápida / previsível, reduzindo o estresse, preocupações e efeitos colaterais.&lt;/p&gt;

&lt;p&gt;Analisando de maneira mais analítica, o planejamento lhe deu segurança para que você pudesse executar as atividades necessárias com maior foco e de maneira mais automática, sem precisar pensar quais são os próximos passos ou se aquilo realmente deveria ser feito. Isso aumenta a qualidade do resultado das atividades e reduz o tempo de execução das mesmas, aumentando a produtividade. Além disso, nos casos de exceção / falha, um plano de contingência e canais de suporte disponíveis lhe dão ferramentas para contornar a situação de maneira mais ágil, reduzir os riscos de falha do objetivo da empreitada e propagar os efeitos colaterais de maneira mais ordenada a todos os envolvidos no resultado desejado, fornecendo perspectivas e prazos de maneira mais assertiva.&lt;/p&gt;

&lt;p&gt;Sendo assim, alguns pontos que você deve observar ao participar ou receber um planejamento:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Você tem visibiliadade de tudo o que deve fazer para alcançar o objetivo?&lt;/li&gt;
  &lt;li&gt;Tem visibilidade de quais são os pontos críticos com maior risco?&lt;/li&gt;
  &lt;li&gt;Você tem plano de contingência ou caminhos alternativos para escolher em alguns pontos chaves que podem apresentar problema?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso tenha respondido não para algum dos pontos acima, lhe recomendo revisar o seu plano e esclarecê-lo, para que o planejamento torne-se efetivo e lhe dê a segurança necessária para que você execute-o com sucesso e alcance seu objetivo.&lt;/p&gt;</content><author><name>Weslley S. Patrocinio</name></author><summary type="html">Neste artigo vamos falar um pouco sobre o meu ponto de visto sobre a importância de um bom planejamento e qual o seu principal valor.</summary></entry></feed>