Métricas de performance e funções de perda para Machine Learning

O processo de treinamento de um modelo supervisionado requer um feedback que consiste em realizar medições de performance e ajustar hiperparâmetros do modelo até que um estado ótimo seja atingido, para que a generalização seja a melhor possível.

Para isso ocorrer, é necessário utilizar métricas para se maximizar a qualidade e minimizar o erro. Veja alguns conceitos utilizados nesta área de aprendizado de máquina:

Underfitting: acontece quando o modelo é muito simples e não é capaz de gerar bons resultados sobre os dados conhecidos (os de treinamento), e muito menos de generalizar bem (sobre dados desconhecidos). Imagine um gráfico 2D onde este modelo representa uma função linear (uma reta), e os dados são vários pontos nesse gráfico, onde muitos deles não são cobertos pela reta.

Por outro lado, se o modelo é muito complexo e possui uma função extremamente fiel aos dados de treino, ele também não vai conseguir generalizar bem. Nesse caso ocorreu um Overfitting. Como exemplos disso podemos ter uma árvore de decisão com muitos nós, ou uma rede neural com mais neurônios do que o necessário. Isso é muito ruim porque o modelo memoriza a entrada de treino ao invés de aprender características dela.

Outro conceito é o Erro Empírico (ou erro de treino): definido como o erro do modelo sobre os dados de treino, que tende a aumentar naturalmente com o tamanho da base de treinamento, até atingir uma estabilização a um nível aceitável. Já o Erro de Validação é o erro do modelo sobre os dados de validação. Tem um comportamento espelhado com relação ao erro empírico, ou seja, tende a diminuir com o aumento da base de treino.

A partir de uma grande base de treinamento, se estas duas medidas de erro estiverem bem acima do erro aceitável (ou desejado), então ocorreu um underfitting, e dizemos que o modelo neste caso ficou com um alto viés – ou bias. Ao contrário, se apenas a medida de erro empírico estiver bem abaixo do erro aceitável, mas a medida do erro de validação estiver bem acima do aceitável, então ocorreu um overfitting e o modelo ficou com alta variância, ou seja, baixo poder de generalização. Nenhum dos dois casos é bom!

Com relação ao aumento da complexidade do modelo, temos que o erro empírico sempre vai diminuindo, porém o erro de validação tende a diminuir até um certo ponto, mas pode começar a aumentar novamente se houver superajuste do modelo. Nota-se, portanto, que é necessário encontrar um ponto ótimo, também chamado de bias-trade-off, onde o erro de validação é o mínimo possível. Durante o treino de um modelo, o objetivo é minimizar o erro de validação e não o erro de treinamento (o empírico), porque deseja-se que o modelo seja capaz de generalizar, e não de se superajustar aos dados de entrada – já conhecidos.

Depois dos conceitos, vamos às medidas de avaliação

É nesse contexto de se encontrar o equilíbrio, que se faz uso de medidas de avaliação e análise da função de perda. A maioria das medidas de avaliação derivam de uma tabela chamada de Matriz de Confusão, que contém a quantidade de classificações corretas versus as classificações preditas para cada classe sobre um conjunto de exemplos, ou seja, ela indica os erros e acertos do modelo comparando com os resultados esperados. Para cada classe é realizada a extração de quatro variáveis:

  • Verdadeiro positivo;

  • Verdadeiro negativo;  

  • Falso positivo;

  • Falso negativo.

A partir destas quatro variáveis definem-se várias métricas de avaliação. Algumas delas são:

A acurácia: representando a porcentagem de elementos classificados corretamente (positivos ou negativos), indica uma performance geral do modelo, porém pode haver situações em que ela é enganosa, no caso de identificação de fraudes em cartões de crédito, as ocorrências são naturalmente bem menores do que a quantidade de casos consideradas legais;

A acurácia por classe: a média das acurácias individuais para cada classe, minimizando o problema de desbalanceamento, como o citado anteriormente;

A precisão: que define, dentre os exemplos classificados como positivos (pelo modelo), quantos eram realmente verdadeiros. Ela é utilizada onde os falsos positivos são considerados mais prejudiciais que os falsos negativos. Por exemplo: é pior classificar um investimento ruim como bom, do que classificar um investimento bom como ruim;

A revocação ou recall: que define, dentre todas as situações de classe positiva (dos valores esperados), quantas foram classificadas como verdadeiras. Ela é utilizada onde os falsos negativos são considerados mais prejudiciais que os falsos positivos. Por exemplo: é bem pior classificar uma pessoa doente como saudável, do que classificar uma pessoa saudável como doente, considerando doente igual a positivo;

A especificidade: que é a porcentagem de amostras negativas identificadas corretamente sobre o total de amostras negativas;

E o F-Score ou F-Measure: que representa a média ponderada de precisão e revocação.

Podemos citar duas métricas que não utilizam as variáveis da matriz de confusão: a “Log-Loss” que depende da probabilidade retornada da classificação, e a “Hamming-loss” que depende da distância média entre o previsto e a classe original.

Então qual métrica é melhor? 

Cada métrica tem suas particularidades que devem ser levadas em consideração na escolha de como o modelo de classificação será avaliado. De maneira geral, não existe uma melhor ou pior que a outra, depende muito da análise do problema.

A outra parte da análise de performance de um modelo, tem relação com as funções de perda que devem ser minimizadas, ao contrário das medidas de avaliação vistas anteriormente que buscamos sempre aumentar.

De modo simplificado, uma função de perda, representa a distância entre o previsto e o real. Como exemplos podemos citar as seguintes funções:

Perda quadrática (ou squared loss): onde o resultado é elevado ao quadrado para que as distâncias negativas não se cancelem no somatório. É mais utilizada para regressões lineares;

Perda de articulação (ou hinge loss): utiliza o conceito de “margem máxima” buscando obter fronteiras com a maior distância dos dados, onde chamamos de margem, a diferença entre o “score” da classe correta e de uma outra classe;

Perda de entropia cruzada (ou cross-entropy loss): muito usada em regressões lineares multivariadas e principalmente em redes profundas. Para se buscar o valor mínimo da função de perda, é utilizado o cálculo de um vetor de derivadas parciais chamado de gradiente, em que este deve ser igualado a zero. O gradiente representa o quão rápido varia a função de perda, e esta se reduz conforme se segue no sentido contrário ao gradiente. Com o gradiente igual a zero, tem-se que a função de perda não sofre mais variação.

Podemos citar (em ordem de importância) algumas técnicas para cálculo e otimização do gradiente:

  • Método do gradiente estocástico descendente (ou SGD): que calcula o gradiente através de um batch aleatório de dados;

  • Método da propagação retrógrada (ou backpropagation): que calcula o gradiente do final para o início usando a regra da cadeia para a determinação das derivadas;

  • Método do momento: que consegue chegar ao mínimo da função de forma muito mais rápida se comparada ao zig-zag do SGD;

  • Método do momento de Nesterov (ou NAG): que é uma variante do método acima, porém mais rápido;

  •  Método RMSProp: que ajusta os valores de gradiente pelo inverso de uma média móvel;

  • Método do gradiente adaptativo (ou ADAGRAD): que é semelhante ao RMSProp, porém utiliza a soma acumulada dos quadrados dos gradientes;

  • Método da estimação do momento adaptativo (ou ADAM): que é o mais utilizado em redes neurais profundas, e reúne a técnica do RMSProp com a técnica do momento.

Sobre a base dados, de forma resumida, deve-se separar uma porção maior chamada de dados de treino, e uma parte menor chamada de dados de teste. Esta parte menor será utilizada apenas após o treinamento para verificações. Não se deve treinar o modelo com dados de teste! 

A fim de se obter as métricas mencionadas anteriormente, é muito comum uma subdivisão nos dados de treino em uma pequena parte chamada de dados de validação. E para se evitar um possível viés no treinamento, pode-se utilizar a técnica K-Fold de validação cruzada (ou cross-validation), onde deve-se definir um hiperparâmetro K, como sendo o número de folds que serão alternados durante o treinamento, ocorrendo várias trocas entre os dados de treino e de validação.

Gostou das nossas dicas e quer saber mais sobre métricas de performance e funções de perda para Machine Learning? Então fale com nosso time. Entre em contato com a Viceri!

As classificações dos algoritmos de Machine Learning

O machine learning, ou aprendizado de máquina, é um ramo da inteligência artificial que se baseia na ideia de que sistemas podem aprender com dados, identificar padrões e tomar decisões com pouca intervenção humana. De tempos para cá o machine learning se tornou essencial na tecnologia e, consequentemente, nas nossas vidas. Este tipo de conhecimento explora a construção de algoritmos que aprendem com seus erros e fazem previsões sobre dados a partir  de diferentes abordagens. 

Diante de um problema onde a solução esteja num aprendizado de máquina, deve-se escolher, dentro deste universo de técnicas, por qual caminho iniciar. Assim, os algoritmos de aprendizado de máquina podem ser classificados em três grandes grupos: Aprendizado Supervisionado, Aprendizado Não-Supervisionado e Aprendizado por Reforço. Abaixo você vai entender cada uma delas.

Aprendizado supervisionado

Nesta abordagem o modelo aprende a executar uma tarefa a partir de exemplos rotulados, ou seja, a partir das respostas corretas, que de alguma forma devem ser passadas para o modelo. Mas como fazer isso? Vejamos com estes dois exemplos: 

  • No primeiro, poderíamos ter um conjunto de imagens separadas por diferentes tipos de veículos (carros, motos, caminhões, ônibus) mapeados cada um com o nome do tipo que representa; 

  • Num segundo exemplo, poderíamos ter uma tabela com valores históricos de demanda num supermercado para servir de exemplo no aprendizado necessário para generalizar uma demanda futura.

Este aprendizado é iterativo e é realizado até que uma condição seja atingida, geralmente uma porcentagem aceitável de acertos, ou seja, a ideia é sempre de minimizar os erros que a inteligência artificial produz. Essa condição de parada com base na acurácia máxima é possível pois se trata de aprendizado com resultado conhecido.

Neste grupo, se encaixa também o aprendizado semi-supervisionado que é quando se tem alguns exemplos rotulados e muitos não-rotulados. A ideia aqui é encontrar padrões semelhantes entre os exemplos e também fazer uso dos rótulos existentes. O Aprendizado Supervisionado consiste em duas classes de algoritmos: Classificação e Regressão, dos quais falaremos mais adiante.

Aprendizado Não-Supervisionado

Em alguns casos, apesar de existir o objetivo da tarefa desejada, os resultados finais não são conhecidos e, portanto, não se tem os rótulos para passar ao modelo. Por exemplo: dada uma coleção de artigos, deseja-se agrupá-los automaticamente de acordo com a frequência de algumas palavras ou contagem de páginas. Não se sabe quantos grupos serão formados.

É nesse contexto que se apresenta o aprendizado não-supervisionado. Este modelo aprende a executar uma tarefa a partir de dados não-rotulados (sem um resultado conhecido), apenas com base em suas características e padrões semelhantes, ou seja, o modelo deduz estruturas a partir de uma amostra do problema; bem utilizado em situações com muitas observações e muitas features como: áudios, imagens e vídeos.

Para isso, existem algumas técnicas que utilizam regras de associação e clusterização, como veremos um pouco mais adiante. Essas técnicas podem ser aplicadas na fase de pré-processamento (ou mineração de dados), para se encontrar anomalias nos dados (os outliers), realizar redução de dimensionalidade em features, etc. Elas podem ser aplicadas também sobre amostras de um problema durante um processo de agrupamento de instâncias.

Alguns exemplos: um sistema que seleciona candidatos para uma vaga, ou que separa turmas de alunos para um determinado trabalho, através de técnicas de agrupamento baseadas em determinadas características que são semelhantes entre essas pessoas.

Mas para qualquer tipo de algoritmo, vale ressaltar um cuidado especial para que a inteligência artificial não faça predições preconceituosas quando se trata de seleção de pessoas, dependendo das features o sistema pode apresentar um viés racista ou sexista. Um exemplo disso é a seleção apenas de homens para vagas de engenharia, por isso o dataset deve ser cuidadosamente balanceado. 

Aprendizado por Reforço

No Aprendizado por Reforço o modelo aprende executando ações e avaliando recompensas. Em resumo, este tipo de algoritmo funciona da seguinte maneira: O agente realiza uma ação num dado ambiente, alterando seu estado inicial, o que gera uma recompensa ao agente. De forma cíclica, o agente avalia esta recompensa (que pode ser positiva ou negativa) e age novamente no ambiente, gerando o aprendizado.

Neste tipo de aprendizado muda-se um pouco o paradigma com relação aos outros dois. Geralmente é aplicada quando se conhece as regras, mas não se sabe a melhor sequência de ações que devem ser executadas, elas são iterativamente aprendidas, como num jogo de xadrez ou num videogame, onde o fundamental são as ações tomadas pelo jogador (ou pela máquina). A robótica é outro campo onde se aplica este aprendizado. Alguns algoritmos: Multi-Armed Bandits, Contextual Bandits e k-Armed Bandits.

Bem, a partir do problema em questão, podemos identificar agora qual o tipo de aprendizado utilizar. Em seguida devemos escolher uma classe de algoritmo para este tipo de aprendizado.

Se for Aprendizado Supervisionado, temos basicamente duas classes de algoritmos:

  •  Classificação;

  • Regressão

Na classificação, o objetivo é identificar a qual categoria pertence uma determinada amostra do problema. Se um e-mail é SPAM ou não; se uma mensagem tem um sentimento positivo, negativo ou neutro; se um vídeo possui conteúdo adulto; ou quais são os animais que aparecem numa determinada imagem, assim por diante.

Exemplos de técnicas de classificação são: Árvores de Decisão (onde os nós internos são rotulados com uma feature de entrada, e os nós folhas são rotulados com a classe a ser preterida), Algoritmo de Naïve Bayes (que é um classificador que trabalha com probabilidades de ocorrência de cada classe para cada valor de atributo, supondo que as variáveis são independentes), temos as Redes Neurais (baseadas em redes de neurônios artificiais interconectados – os perceptrons, onde os pesos das camadas ocultas são ajustados a cada iteração), dentre outros.

Diferentemente da classificação, na regressão, a ideia é prever um valor numérico; ou em outros termos: identificar uma categoria em escala contínua (pode ser até uma probabilidade). Neste caso, o modelo pode aprender uma função para prever o preço de um imóvel, uma demanda de venda, probabilidade de superlotação de um estoque, o tempo que levará para uma máquina apresentar defeito, uma nota de um cliente para aumentar seu limite de crédito, ou qualquer outro valor quantitativo.

Alguns exemplos de técnicas de regressão são: regressão linear, regressão logística e as redes neurais (que também podem resultar valores contínuos).

Agora, no Aprendizado Não-Supervisionado, destacam-se duas técnicas:

  •  Associação;

  • Clusterização.

A associação: permite o descobrimento de regras e correlações, identificando conjuntos de itens que frequentemente ocorrem juntos. Os varejistas costumam usar esta análise em carrinhos de compras, para descobrir itens frequentemente comprados em conjunto, desenvolvendo assim estratégias mais eficazes de marketing e merchandising.

Na clusterização (ou agrupamento): o conjunto todo em análise sofre segmentações em vários grupos, com base nas semelhanças encontradas. É uma técnica que permite dividir automaticamente um conjunto de dados em grupos de acordo com medidas de similaridade ou de distância. Existem diversas fórmulas para se obter medidas de similaridade, dentre elas podemos destacar o método do cosseno e a correlação de Pearson.

Dentre os métodos de clusterização podemos citar: o baseado em particionamento, baseado em densidade, o hierárquico aglomerativo e hierárquico divisório.

Para o Aprendizado por Reforço podemos citar os algoritmos:

  • Q-Learning;

  • Aproximação por função com atualização por gradiente; 

  • Multi-Armed Bandits;

  • Contextual Bandits;

  • k-Armed Bandits

Quer saber mais sobre algoritmos de Machine Learning? Entre em contato com a Viceri. Nós temos um time de especialistas sempre prontos para te ajudar!

Como reduzir custos com a AWS

Veja como a nuvem pode deixar sua infraestrutura mais enxuta e fazer você economizar

Reduzir custo na infraestrutura de um sistema é essencial, sobretudo em um momento como este em que qualquer corte de gastos é muito bem-vindo. Neste cenário, a nuvem entra como uma forma de deixar a sua infraestrutura mais enxuta, desde mecanismos de monitoramento, passando pela possibilidade de desligar o equipamento em momentos ociosos, até reservar máquinas para conseguir descontos. 

A AWS, Amazon Web Services, oferece uma infraestrutura sob demanda, para  que você pague apenas pelo que consumir. Isso quer dizer que você tem uma redução de custos a longo prazo e economiza uma quantidade dinheiro que pode ser usado para investimento em inovação e novas oportunidades.

Pague apenas o que usar

A AWS oferece algumas modalidades de virtualização de máquina. Dentre essas modalidades existe on-demand  que, como o próprio nome já diz, é a modalidade sobre demanda. Isso significa que você vai pagar somente o que tiver utilizando efetivamente. 

Se a sua aplicação precisar de uma visita apenas durante os dias de semana, você pode deixar a sua máquina parada durante o final de semana. Considerando um mês de trinta dias e quatro finais de semana, teríamos oito dias com a máquina parada sem gerar custo. Isso equivaleria a uma economia de aproximadamente 25%. Agora, imagine se sua aplicação ficar online apenas em horário comercial, o desconto seria muito maior e poderia chegar a 70%.

Tabela de redução segundo a AWS. Fonte: aws.amazon.com/pt/economics

Calculadoras de custo total de propriedade da AWS

A calculadora de TCO, Custo Total de Propriedade, da AWS permite que você faça uma estimativa sobre a redução de custo ao usar a plataforma. A AWS oferece relatórios detalhados inclusive para apresentações executivas. A calculadora permite modificações e suposições de acordo com suas necessidades da sua empresa. Neste ambiente você pode comparar o custo da execução das aplicações ou de hospedagem tradicional com o custo da execução na AWS. 

Processo automatizado 

É possível realizar o agendamento de parada e inicialização de recursos automaticamente, sem a necessidade de intervenção manual para realizar o procedimento todos os dias, evitando mão de obra e dando garantias de sempre acontecer, removendo os riscos de possíveis esquecimentos humanos. 

Uma das possibilidades é utilizar o CloudWatch como gatilho, criando uma regra em determinado horário para uma função lambda. Essa função lambda, por sua vez, consome SDK da AWS e oferece todos os comandos para você desligar o EC2 ou RDS. É uma solução bem utilizada e fácil de implementar.

Outra forma, ainda mais fácil, é utilizar uma solução já existente: o AWS Instance Scheduler. Ela facilita as paradas tanto das máquinas EC2 quanto RDS. Internamente o uso não é diferente da função anterior, ele usa o CloudWatch e a lambda, além disso, para armazenar alguns valores ele utiliza o DynamoDB. É uma boa solução caso você não queira fazer sua própria função lambda. Porém, vale ressaltar que você é responsável pelo pagamento de cada serviço utilizado na solução, então haverá aumento de consumo nos serviços mencionados acima.

Uma terceira possibilidade é configurar a instância na hora de criar a máquina dentro de um auto scaling group. Isso dará a possibilidade de configurar a quantidade de instância desejável em um determinado horário. Na hora de configurar você pode usar uma fórmula de cronograma como os usados no gatilho do CloudWatch e determinar dia e horário.

Cuidado para não perder seus dados! 

Alguns cuidados precisam ser tomados ao utilizar um processo automático de desligamento de máquinas EC2. Podem surgir problemas quando aplicações críticas estão rodando algum processo long-running em background e são paradas abruptamente. Se a sua aplicação mantém algum tipo de estado não persistido (deixado em memória, por exemplo), você fatalmente perderá essas informações. Se a sua aplicação não estiver tratando operações como atômicas, ou seja, transacionando no banco de dados, pode acabar gerando inconsistência na base.

Se a sua aplicação usa algum meio de persistência local como o próprio EBS, é importante que você apenas pare a aplicação e não a finalize. Quando você finaliza, acaba perdendo todas as informações do disco local. 

◼️ Leia também: O manual da segurança de dados na AWS e as responsabilidades compartilhadas

Atenção ao limite de dias para parar sua instância RDS

Atualmente existe um limite máximo de sete dias que você pode manter seu banco de dados parado, depois disso ele automaticamente irá iniciar novamente. Como já falamos, quando ele está parado não há cobrança, mas há limitações: no banco de dados postgres, ao usar um banco read replica não é possível parar o banco primário até que seja excluído o banco de réplica. Isso significa um aumento expressivo no tempo de inicialização nestes casos.

Apesar do tempo de inicialização ser maior, financeiramente pode valer a pena. O tempo de inicialização irá aumentar porque será preciso recriar o banco sempre que iniciá-lo novamente. Pode levar dez, vinte minutos, mas caso seu banco fique ocioso durante um longo período, financeiramente pode ser muito vantajoso

Outras formas de reduzir custos com a AWS também são possíveis. Vamos considerar um serviço que roda em background e que a cada 5 horas realização uma operação no banco de dados. Isso significa que ele ficará ocioso por 5 horas, depois irá trabalhar durante alguns segundos, para ficar ocioso novamente durante outras 5 horas.

Considerando a atividade descrita acima, é válida a criação de uma AWS lambda, onde você será cobrado apenas pelo tempo que executar o processamento da rotina.Uma solução bem interessante quando se tem vários serviços que rodam de tempos em tempos.

Presença global por um preço acessível ao bolso

A AWS tem uma presença global que permite repassar a economia para quem compra esse serviço de maneira contínua. São diversas opções de pacotes e serviços que podem oferecer economia de 75% a 90% das taxas sob demanda se for escolhida a capacidade pré-adquirida ou capacidade reserva.

Como já falamos anteriormente, na AWS não é preciso fazer compromissos com gastos mínimos ou contratos de longa duração. Você pode substituir as despesas iniciais por pagamentos que se aplicam apenas àquilo que você necessita. Nada de contratos ou modelos complexos que dificultam seu dia a dia. 

Ficou interessado? A Viceri tem uma equipe pronta para fazer a migração do seu banco e colaborar em tudo que você precisar durante o processo. Fale com a gente!

Como transformar seu monolito em microsserviço

Transformar uma aplicação monolítica em microsserviços poder ser uma tarefa muito complexa. Conheça alguns caminhos possíveis de se seguir quando estiver refatorando sua aplicação monolítica

Transformar uma aplicação monolítica em microsserviços é uma forma de modernizar a aplicação.

E se você trabalha com tecnologia, deve saber que o processo de transformar uma aplicação monolítica em microsserviços é uma tarefa muito complexa e delicada. Exige tempo e paciência de todos os envolvidos. 

A arquitetura monolítica é uma arquitetura tradicional de desenvolvimento de sistema de software.

Ela se baseia no princípio de que todos os processos dentro de uma mesma solução estão ligados. Isso quer dizer que são acoplados, que estão dentro de uma base de dados similar e executam seus processos como um único serviço. 

Já a arquitetura de microsserviços veio para solucionar problemas enfrentados pela arquitetura monolítica.

É um modelo que desenvolve pequenos serviços que realizam funções independentes.

Por serem independentes, podem atender demandas específicas em uma solução maior. É um processo menos tradicional que a arquitetura monolítica. 

Primeiros passos para refatorar uma aplicação 

Para que a migração de uma para a outra se torne uma tarefa mais simplificada, existem alguns caminhos possíveis de se seguir quando estiver refatorando sua aplicação monolítica.

A primeira dica é não fazer uma reescrita total da sua aplicação. Ou seja, esqueça a ideia de direcionar todos os esforços do time para reescrever a aplicação do zero.

Isso é extremamente arriscado e geralmente resulta em problemas que acabam levando mais tempo que o planejado. 

Vá devagar! O mais recomendado é refatorar aos poucos sua aplicação monolítica. Construa uma aplicação de forma incremental, rodando cada novo microsserviço em conjunto da aplicação original.

Com o passar do tempo, a quantidade de funcionalidades implementadas em microsserviços vai mostrar que o monolito encolheu tanto que em algum momento ele deixará de existir.

Quando sua aplicação monolítica se tornar ingerenciável, deve-se parar de tornar seu monolito maior.

Se você tiver de implementar uma nova funcionalidade, não adicione esse código ao monolito. Ao invés disso, a melhor estratégia é colocar o novo código em um microsserviço próprio para isso.

Glue Code

É neste cenário que surge o Glue Code, que são as dependências responsáveis pelo acesso aos dados.

Geralmente o serviço usará bibliotecas e componentes de acesso a dados da sua aplicação original.

O glue code  é chamado também de camada anti-corrupção, já evita que o microsserviço seja poluído com problemas da aplicação legada.

Desenvolver uma camada anti-corrupção não é algo muito comum, mas é essencial quando se quer manter uma aplicação confiável.

Com isso em mente, esse Glue Code pode seguir três estratégias:

– Invocar uma API remota, fornecida pelo monolito;

– Acessar a base de dados do monolito diretamente;

– Manter sua própria cópia da base com parte dos dados necessários para o microsserviço, que estará sincronizada com a base do monolito. 

E o que acontece ao implementarmos novas estratégias? 

Implementar novas funcionalidades como um microsserviço tem uma série de benefícios.

Essa estratégia impede que seu monolito se torne cada vez mais ingerenciável, ao mesmo tempo que permite que o serviço possa ser desenvolvido, implantado e escalado de maneira independente do monolito.

A cada novo serviço criado, será experimentado um pouco mais dos benefícios desta arquitetura.

Entretanto, essa abordagem não acaba com todos os problemas do monolito. Para tentar consertar esses problemas, é necessário quebrar o monolito em partes cada vez menores.

Outra estratégia que ajuda a encolher a aplicação monolítica é separar a sua camada de apresentação da lógica de negócio e do acesso a dados.

Geralmente existe uma separação muito clara entre a camada de apresentação e as camadas de regras de negócio e dados.  E isto é o que permite fazer a separação do seu monolito em duas aplicações menores.

Uma aplicação será o frontend, e a outra o backend. Uma vez separados, o frontend fará chamadas independentes ao backend.

Separar um monolito dessa maneira permite que o time desenvolva, implante e escale duas aplicações de maneira independente.

Essa estratégia, no entanto, é somente uma solução parcial. É bem comum que você troque um problema enorme por dois problemas menores, mas que no contexto geral ainda são um problemão a ser resolvido.

Você terá de usar uma outra estratégia para eliminar os monolitos restantes.

Essa outra estratégia é transformar os módulos existentes dentro de um monolito em microsserviços.

Cada vez que você extrai um módulo e o transforma em um serviço, o monolito encolhe. Uma vez que tenha sido convertido muitos módulos, o monolito deixará de ser um problema. Ou ele irá sumir ou vai acabar virando um microsserviço.

Converter um módulo em microsserviço requer tempo e paciência 

Uma aplicação monolítica grande geralmente terá dezenas ou centenas de módulos, todos dispostos a serem extraídos.

Saber quais módulos converter primeiro pode ser desafiador. Uma boa abordagem é começar com alguns módulos que são fáceis de extrair.

Converter um módulo em um microsserviço é algo que requer tempo. Uma dica é priorizar módulos que mudam com frequência.

Isto trará experiência com arquitetura de microsserviços e com o processo de extração.

Depois que você extrair esses módulos mais fáceis, poderá partir para os mais complexos.

Uma vez que você tenha convertido um módulo desses para um serviço, você pode desenvolver e implantar ele de maneira independente do monolito, o que vai acelerar o desenvolvimento.

Outra abordagem interessante é extrair os módulos que possuem requisitos diferentes do resto da aplicação.

Por exemplo, pegar aquele módulo que utiliza recursos específicos do servidor como muita memória ou CPU. Conforme você vai extraindo estes módulos específicos, você vai ver como se tornará mais fácil escalar os microsserviços.

O primeiro passo ao extrair um módulo é definir a interface entre o módulo e o monolito.

Geralmente será um contrato bidirecional, pois é comum o monolito precisar de dados do microsserviço e vice-versa.

Se a lógica de negócio do monolito estiver muito acoplada, talvez seja difícil de extrair apenas o necessário para o microsserviço, então é possível que uma refatoração interna no monolito seja necessária para continuar avançando com essa extração.

Uma vez que você tenha extraído um módulo, é mais um serviço que permite ao time desenvolver, implantar e escalar mais facilmente do restante do monolito.

Sendo possível, inclusive, reescrever este serviço do zero mais tarde, uma vez que o módulo já foi isolado.

Cada vez que você extrair um novo serviço, estará um passo mais perto de ter uma aplicação 100% em microsserviços.

Com o passar do tempo, seu monolito encolherá e a virada de chave entre as arquiteturas se tornará algo natural.

Quer saber mais como sua empresa pode aplicar isso na prática? A Viceri conta com especialistas que podem te ajudar. Fale com a gente!

Outsourcing de TI: como a Transformação Digital está mudando a relação entre CIOs e fornecedores de tecnologia

Tempos de crise são momentos em que aparecem soluções disruptivas e inovadoras, afinal, a necessidade é a mãe da criatividade e da adaptação. Falar de Covid-19 é chover no molhado, mas este momento é mais do que oportuno para refletir sobre as formas de trabalho que utilizamos até então.

Falando especificamente da área de TI, de uma hora para outra, ela foi obrigada a rever toda sua infraestrutura e os recursos disponíveis para deslocar a força de trabalho do escritória para a casa, executando as atividades em home office. Muitas empresas não estavam preparadas para o trabalho remoto, não tinham aprendido como fazer isso, nem estabelecido políticas corporativas para esse caso, tampouco processos e procedimentos adequados para essa prática.

Nesse cenário, alguns questionamentos são inevitáveis para os CIOs: “E se talvez eu tivesse terceirizado meu setor de desenvolvimento? Hoje teria apenas que administrar contratos com meus provedores, sem a preocupação com uma equipe própria tão grande, trabalhando remotamente, fornecendo infraestrutura para tal e pensando em ações para manter a saúde física e emocional de cada um deles. Tudo isso seria um problema do meu provedor, e assim estaria focado em resolver problemas do negócio, em como superar a crise e o que fazer quando ela passar.”

Neste sentido, fazemos aqui uma provocação quanto a pensar na possibilidade de outsourcing de TI em algumas das atividades de tecnologia da sua empresa. Antes tarde do que nunca.

Para tal, CIOs precisam refletir sobre o seu relacionamento com seus atuais fornecedores de TI. Nessa linha de raciocínio, questões importantes estão surgindo sobre o papel dos provedores de TI, que têm sido um dos pilares do cenário tecnológico nas últimas duas décadas. Eles estão mesmo colaborando com a inovação da sua organização? Eles oferecem as economias de custo prometidas? Eles estão gerando resultados estratégicos ou estão apenas cumprindo metas? Essas questões são cruciais para garantir que a sua corporação acompanhe a inovação e, ainda, mantenham seus sistemas legados.

No mundo digital, a tecnologia não é mais um facilitador, mas um ativo estratégico e uma vantagem competitiva. Empresas que não a priorizarem não sobreviverão. Os CIOs estão no comando dessa jornada de transformação digital e estão sob crescente pressão para fornecer os recursos de tecnologia que permitam às empresas gerar valor.

Esse desafio está levando os CIOs a redefinirem como se envolvem, e o que esperam de seus fornecedores de TI. Em um estudo recente realizado pela McKinsey com 250 CIOs globais e tomadores de decisão em tecnologia, chama a atenção uma definição trazida por um dos entrevistados: “Dada a escassez de talentos capazes internamente, nossos recursos estão focados em trabalhar com os provedores de TI para definir o problema e, em seguida, fazer parceria com eles para executar”, comenta.

Esse relacionamento em evolução com os provedores de TI aparece em outros pontos da pesquisa. Mais da metade dos líderes de TI acredita que “não há outra maneira” de atingir suas metas de transformação digital sem uma estreita relação com seus provedores de TI. A pesquisa e as entrevistas apontam para um papel ativo dos fornecedores de tecnologia ao longo da jornada de transformação digital de muitas empresas. No entanto, o foco, expectativas, e os atores que moldam esse papel, diferem significativamente daqueles que foram considerados o padrão no passado.

Conforme o estudo, o gráfico abaixo demonstra os principais motivos que levam os líderes de tecnologia a pensar num outsourcing de TI para as atividades de suas empres. Confira:

(Fonte: McKinsey)

Embora o custo seja uma das principais razões pelas quais a maioria das empresas está ou irá trabalhar com fornecedores de TI, outros fatores estão ganhando importância agora. Acesso ao talento e inovação são fatores cruciais para influenciar nessa decisão. Além disso, a capacidade de se engajar com a empresa contratante é citado com um fator-chave para a escolha do provedor de TI por 60% dos CIOs entrevistados.

Em resumo, você precisa de provedores que tragam valor ao negócio, ou seja:

  • Apoiem e executem a transformação digital;
  • Permitam redução de custos globais da sua empresa (talentos, infraestrutura, espaço físico, etc);

  • Impulsionem a inovação para o negócio de sua empresa como um todo;

  • Proporcionem essa inovação para a própria área de TI;

  • Entreguem resultados para o seu negócio;

  • Tragam talentos e know-how uptodate para a sua organização.

Frente ao aumento do escopo e das responsabilidades envolvidas, cada vez mais os CIOs estão compartilhando a decisão e a escolha de provedores de TI com seus líderes das áreas de negócios. Pesquisas mostram que, atualmente, mais da metade das decisões em relação ao tema são tomadas conjuntamente ou diretamente pelo líder da área de negócios.

Conforme outro estudo da McKinsey, as lideranças de TI precisam estabelecer uma relação de parceria com as áreas de negócios, compartilhando metas, responsabilidades e prestação de contas. De acordo com a pesquisa, empresas que estabelecem esse tipo de alinhamento estratégico têm mais chances de sucesso na Transformação Digital e mais capacidade de gerar impacto no mundo dos negócios.

Assim, cabe às áreas de negócios incluir a tecnologia e a escolha de seus fornecedores como um dos pilares estratégicos da organização, bem como cabe ao CIO se posicionar como líder estratégico para se relacionar com um provedor de TI que realmente criará impacto na sua corporação.

E quem escolher? Atualmente, fornecedores de “nicho” vem conseguindo mais espaço nas grandes empresas, se comparado aos grandes integradores de TI do passado. Embora trabalhar com esse tipo de serviço talvez seja mais complexo, tanto na escolha quanto no gerenciamento, os resultados geralmente justificam.

Então, se você ainda não pensou em ter um parceiro de Outsourcing de TI na sua área de tecnologia, aproveite o momento para planejar como faria isso após a retomada normal das atividades.

**Washington Fray é Diretor de Vendas e Marketing da Viceri, empresa de tecnologia com mais de 29 anos de mercado que atua para estabelecer alianças duradouras e provocar grandes transformações através da inovação e da tecnologia. Em seu portfólio, a instituição tem como clientes algumas das maiores empresas do Brasil como a Mapfre Seguros, Brinks, Brasilprev e Instituto Unibanco.

 

DevOps com microsserviços na AWS: tudo que você precisa saber sobre essa forma de trabalho

Com a constante necessidade das empresas se transformarem em verdadeiras fábricas de inovação digital, a agilidade para a disponibilização de novos produtos e experiências aos consumidores se tornou imperativa. Por isso, criar mecanismos que permitam uma entrega de TI mais rápida e com mais qualidade é cada dia mais essencial para sobreviver no mundo corporativo.

Entretanto, para fazer isso de forma inteligente, é preciso ir além da adoção isolada de rotinas de trabalho mais ágeis ou de altos investimentos em plataformas complexas, acreditando que a rapidez nas entregas surgirá instantaneamente assim que elas forem ativadas. Para criar resultados efetivos, é preciso combinar essas duas frentes, aliando técnicas de trabalho e habilidades da sua equipe com essas ferramentas.

Neste artigo, você vai saber mais sobre uma dessas combinações e entender porque aliar a metodologia DevOps com Microsserviços na AWS pode ser a chave para a otimização de processos e para o aumento da qualidade de softwares, bem como o aumento do desempenho da área de TI do seu negócio. Confira!

O que é DevOps

Para quem não conhece essa forma de trabalho, o DevOps é um conjunto de práticas e ferramentas de trabalho que propõe a unificação entre as áreas de desenvolvimento e operações, tornando o setor de TI mais integrado e mais ágil. 

Além da constante comunicação entre os profissionais de tecnologia e um fluxo de trabalho que facilita as operações de ambos, o DevOps prevê o uso de ferramentas de automação que proporcionam agilidade e otimização de diversos processos da construção do software, tais como testes, build e deploy.

Assim, a entrega da equipe de TI não só é mais rápida, como também mais confiável, já que os profissionais podem se dedicar mais à inovação, segurança e qualidade de software, de modo a minimizar as chances de erros.

Computação em nuvem com AWS 

Embora não se limitando ao seu uso com DevOps, a computação em nuvem é importantíssima para a adoção dessa forma de trabalho. Na prática, ela funciona através da execução de recursos de TI por meio da Internet. O objetivo é substituir datacenters e servidores físicos por repositórios e aplicações online através de um provedor de nuvem. 

Isso proporciona uma economia em termos de estrutura e um ganho de produtividade para os profissionais de tecnologia. Conforme dados da IDC, o investimento global em computação em nuvem pública deve chegar à US$ 216 bilhões em 2020, evidenciado que os líderes de grandes empresas veem esse como um dos seus principais investimentos futuros.

A Amazon Web Services (AWS) é um desses provedores. Lançada em 2006 e fornecida pela Amazon, a plataforma possui abrangência global e mais de 175 serviços de nuvem disponíveis para os profissionais de TI. A AWS conta com diversas ferramentas para facilitar o cotidiano de empresas que adotam o modelo DevOps, tais como: 

AWS CodeCommit

Serviço que hospeda repositórios protegidos baseados em Git, possibilitando a colaboração da equipe em um determinado código em um ecossistema seguro e escalável.

AWS CodeBuid

Serviço de compilação do código-fonte que realiza testes e produz pacotes de software prontos para implantação. Ele elimina a necessidade do profissional provisionar, gerenciar e escalar seus próprios servidores do build.

AWS CodeDeploy

Serviço que automatiza a implantação de códigos em servidores, facilitando o lançamento rápido de novos recursos, reduzindo o tempo de inatividade durante a implantação de recursos e agilizando a atualização de software.  

AWS CodePipeline

Gerencia a entrega contínua de aplicações e infraestruturas, implantando alterações de código automaticamente sempre que elas ocorrerem. Em caso de erros, ele gera logs que permitem visualizar tudo o que aconteceu durante os processos, facilitando a identificação e solução do problema.

Microsserviços

Os microsserviços são uma arquitetura de desenvolvimento de software diferente da tradicional, na qual sistemas grandes e complexos são transformados em componentes individuais. Cada um com uma função única, esses componentes se comunicam entre si através de APIs bem definidas.

Com microsserviços, a agilidade adquirida através do DevOps é potencializada, já que cada funcionalidade do sistema pode ser desenvolvida, operada, monitorada e atualizada independente do todo. De acordo com a Orbis Research, o investimento em plataformas de microsserviços deve crescer mais de 21% no período 2020-2025. 

Combinando DevOps com microsserviços na AWS, os desenvolvedores e profissionais podem trabalhar diretamente em um ambiente seguro, inteiramente baseado na nuvem e pronto para receber todas as inovações que a equipe conseguir produzir.

Quais as vantagens dessa combinação

Na prática, uma arquitetura de microsserviços garante muita rapidez para operações que poderiam custar muitas horas de trabalho. Em uma arquitetura monolítica, cada vez que uma única função precisa ser atualizada ou uma falha corrigida, todo o sistema precisa ser tirado do ar e, posteriormente, passar novamente por processos de testes, build e deploy.

Já em arquiteturas de microsserviços, uma mesma funcionalidade pode ser isolada do restante do sistema para passar por esses processos. Com isso, a entrega de novas funcionalidades inovadoras para cada sistema e a própria manutenção em caso de falhas podem ocorrer constantemente, já que não é preciso derrubar a aplicação inteira para realizar essas operações.

Por exemplo, supondo que um e-commerce comece a apresentar problemas nas funções relacionadas a pagamento. Em uma arquitetura monolítica, todos os processos de compra ficariam indisponíveis para correção da falha. Com microsserviços, é possível isolar o componente responsável por pagamentos enquanto as funções de catálogo, carrinho de compras e configuração do usuário continuam funcionais.

Pode parecer pouco, mas lembre que um sistema estável é essencial para o seu cliente. Às vezes, uma hora com sua aplicação fora do ar pode ser suficiente para ele abandoná-la para sempre.

Para o seu time de TI, essa arquitetura representa a possibilidade de ter múltiplas equipes trabalhando simultaneamente para fazer com que cada parte da experiência do consumidor seja a melhor possível. Além disso, a comunicação, integração e rotinas de trabalho propostas pelo DevOps são facilitadas, uma vez que os profissionais terão uma estrutura pronta para trabalhar nesse modelo ao invés de construir uma do zero.

Por último, mas não menos importante, o uso de microsserviços na AWS para o seu time operar em DevOps elimina a necessidade de investir em hardware e equipamentos de datacenter para manter essa forma de trabalho, uma vez que tudo acontecerá em um sistema seguro e inteiramente digital. Isso pode significar uma grande vantagem financeira para o seu negócio e evitar algumas dores de cabeça, ajudando-o a focar mais no seu core business do que no monitoramento de sistemas físicos de TI.  

Você já conhecia essas funcionalidades da AWS? Quer saber mais sobre como essa plataforma pode ajudar seu negócio a implantar a cultura DevOps? Envie uma mensagem para a gente e tire todas as suas dúvidas sobre essa combinação.

Microsserviços e AWS

Manter todas as soluções do seu site ou aplicativo funcionando de forma harmônica e ágil, pode ser um grande desafio diário. Neste momento, é importante contar com o auxílio das tecnologias disponíveis para te ajudar em alguns processos e automatizar atividades que lhe pouparão tempo, custos e burocracia, e que contribuem para a otimização de alguns processos dentro da sua solução, de forma segura.

Computação em Nuvem e sua relação com os Microsserviços

A computação em nuvem é o termo usado para definir a utilização de serviços e recursos de computação através da internet, como armazenamento de dados, a capacidade de processamento, banco de dados, rede, softwares, entre outros. Nela, você paga apenas pelos serviços que você ou sua empresa utilizam. 

Já os Microsserviços são um modelo de Arquitetura de Software que consiste no desenvolvimento de pequenos serviços independentes e com baixo acoplamento dentro de um sistema, criados para atender a recursos específicos, cada serviço é projetado e gerenciado por uma pequena equipe especializada naquela solução, utilizando o seu próprio banco de dados e base de códigos. 

Cada serviço pode ser implementado, atualizado e escalado de forma individual para atender a uma demanda ou função específica de uma solução maior. Os serviços se comunicam por meio de API’s bem definidos e não necessariamente compartilham da mesma biblioteca, tecnologia ou estrutura arquitetural. Saiba mais sobre a arquitetura de microsserviços no nosso post: O que são microsserviços e quais são as suas diferenças da arquitetura monolítica?

Como cada serviço dentro de um microsserviços funciona de forma autônoma e independente, é possível utilizar a Computação em Nuvem para desenvolver, gerenciar e disponibilizar cada um dos serviços do sistema do software. Conheça as vantagens:  

  • Redução dos custos: elimina-se gastos com investimentos em hardware, software, data centers e suas manutenções. Além da redução de custos com profissionais de TI voltados para o gerenciamento desta estrutura;

  • Otimização de Recursos: sua empresa tem a possibilidade de ajustar os recursos de acordo com as necessidades de cada serviço do sistema;

  • Produtividade: Elimina-se a necessidade de datacenters locais o que possibilita a concentração de esforços da equipe de TI na obtenção de metas comerciais mais importantes;

  • Escalabilidade: É mais ágil e econômico escalar diferentes serviços dentro de um sistema;

  • Maior estabilidade ao sistema: Como cada serviço funciona de forma independente e autônoma, uma sobrecarga de demanda não afetará o funcionamento do restante do sistema. Além disso,como a maioria dos serviços de computação em nuvem funcionam com autosserviço sob demanda, as solicitações para determinadas demandas com maior quantidade de recursos de computação podem ser feitas em minutos. 

  • Segurança: Cada serviço possui seu próprio banco de dados e os provedores de nuvem oferecem políticas, tecnologias e controles eficientes que garantem a segurança destes dados.

E para que a sua solução funcione de forma adequada e eficiente é importante que a sua empresa invista em uma plataforma de nuvem de confiança, abrangente e inovadora, como é o caso da Amazon Web Services (AWS).   

Por que a AWS proporciona um funcionamento eficiente de Microsserviços?

A AWS é a plataforma de nuvem da empresa Amazon. É a mais abrangente plataforma do segmento e oferece mais de 175 serviços completos de datacenters em todo o mundo. Possui em sua carteira de clientes startups de crescimento rápido, grandes empresas e alguns dos maiores órgãos governamentais. A AWS oferece alguns dos serviços que são essenciais e auxiliam para o perfeito funcionamento da computação em nuvem e dos microsserviços,  como:

Docker

A Docker é uma plataforma do software que permite a criação, o teste e a implantação de aplicações rapidamente. O Docker cria pacotes menores de unidades padronizadas, que são conhecidas como containers,  sua funcionalidade é essencial para manter o serviço, pois possibilita realizar a escala individual de cada um dos serviços, isso faz com que seja possível disponibilizar a performance adequada para cada um dos serviço da sua solução.

Amazon S3 (Amazon Simple Storage Service)

A Amazon Simple Storage Service é um sistema da AWS que foi desenvolvido para facilitar a computação de escala na web para os desenvolvedores. Ele permite o armazenamento e recuperação de qualquer tipo de dados, em qualquer momento e lugar na web. Este sistema é altamente dimensionável, rápido, econômico, confiável e seguro, e permite a escalabilidade do serviço pela própria AWS, sem precisar de atuação manual. A Amazon S3 tem recursos para banco de dados no cycle, que atualmente é totalmente introduzida nas aplicações para microsserviços. Ele consiste em ser rápido e flexível para os aplicativos, diminuindo o tempo de resposta para o cliente.

Amazon RDS

Para facilitar a configuração, operação e a escalabilidade do banco de dados relacionais dentro da nuvem, o sistema Amazon Relational DataBase Service (RDS) oferece uma gama de banco de dados populares disponível no mercado, tornando mais fácil a escalabilidade e backup desse recurso. 

Application Load Balancer

O Application load balance oferece serviços de rede com latências baixíssimas de comunicação, possibilitando o balanceamento e configuração de carga do tráfego de rede http e https.

Amazon EC2 (Amazon Elastic Compute Cloud)

O Amazon Elastic Compute Cloud (EC2) oferece uma capacidade de computação dimensionável na nuvem da AWS, foi projetado para desenvolver e implantar aplicativos de forma rápida, eliminando a necessidade de investir em hardwares. O EC2 também possibilita o gerenciamento da expansão ou redução do tráfego do servidor, proporcionando maior flexibilidade nos momentos de pico em determinados serviços.

AWS CloudTrail

O AWS CloudTrail  grava continuamente todo o histórico de eventos e rastreia tudo que aconteceu em seu sistema de rede e infraestrutura da sua aplicação, esse histórico promove maior segurança, rastreia as alterações de recursos, facilita a solução de problemas e detecta atividades incomuns na conta. Isso contribui para o seu sistema ser mais seguro e possibilita o registro de operações realizadas no sistema.

AWS X-Ray

O AWS X-Ray funciona para aplicativos simples e complexos, em ambientes de desenvolvimento e produção. Ele rastreia as solicitações do usuário enquanto percorrem o aplicativo, agrega os dados gerados por serviços e recursos individuais, oferecendo uma visão completa de planejamento. Esse sistema permite a visualização centralizada de logs e o monitoramento de uma resposta rápida para problemas complexos entre microsserviços. Disponibilizando uma visualização completa sobre as solicitações e mostrando um mapa dos componentes do aplicativo, o X-Ray analisa os aplicativos que estão em produção e possibilita entender sua performance dentro do serviço.

A AWS é uma plataforma extremamente confiável, que reúne tecnologias e serviços que garantem um funcionamento eficiente, seguro, econômico e menos burocrático para toda a arquitetura de microsservices da sua solução. Quer saber mais? Entre em contato com o time da Viceri! Temos um time de completo de engenheiros certificados em AWS que ajudarão a fazer o seu negócio crescer.  

LGPD: prazos, penalidades e recomendações

Anteriormente prevista para entrar em vigor em agosto de 2020, a Lei Geral de Proteção de Dados sofreu um adiamento de sua data para entrada em vigor. A nova data afora é 3 e maio de 2021. A crise do COVID-19 e sua quarentena causaram suspensão e atraso de prazos e determinações legais. Isso dá maior prazo para as empresas adequarem suas políticas e rotinas à nova lei.

Essa regulação vem em um momento em que a proteção de dados se torna uma questão de extrema importância, principalmente devido ao modo como a tecnologia vem se relacionando com o nosso dia a dia. Para entender melhor como a LGPD precisa ser atendida em todas as empresas, é necessário entender a relação desta lei com o Cambridge Analytica.

A LGPD e o Cambridge Analytica

A origem da LGPD começa com um professor de psicologia chamado Aleksander Kogan, que lecionava na Universidade de Cambridge. Ele obteve permissão do Facebook para coleta de dados para um aplicativo chamado thisisyourdigitallife que tinha fins meramente acadêmicos.

O aplicativo gerava testes de personalidade baseados em séries famosas da grande parte do público usuário do Facebook. Foi através desses testes que Aleksander conseguiu coletar nome, endereço e conteúdos de likes de 270 mil usuários da rede social. Até esse ponto da história, tudo ocorreu legalmente, por mais duvidável que seja. O problema começa quando o professor decide vender todo esse volume de dados para uma empresa chamada Cambridge Analytica, que não possui nenhuma relação com a universidade.

De acordo com o Facebook, a rede social possui condições de uso do software que proíbe o repasse de dados para terceiros. Em 2015 essa violação de dados se tornou do conhecimento do Facebook, que removeu o aplicativo do professor da rede e solicitou que esses dados vendidos fossem completamente apagados. Mas depois ficamos sabendo que isso não aconteceu com todos os dados.

Essa “brecha” que permitiu o vazamento de informações de mais de 270 mil pessoas trouxe à tona a discussão da proteção de dados. Apesar de muito grave, o caso do Cambridge Analytica aconteceu devido a um consentimento oculto dos usuários do Facebook, que tratou o assunto como quebra de conduta ao invés de uma falha de segurança na própria rede.

Quer saber mais sobre a nova Lei Geral de Proteção de Dados? Acesse o nosso whitepaper especial “Tudo sobre a LGPD” e confira vários conceitos e dicas para adequar o seu negócio à nova legislação!

Tratamento de dados e as exceções da LGPD

É preciso entender que, a partir do momento da implementação da Lei Geral de Proteção de Dados, o titular é o dono dos dados. Ou seja, a pessoa física natural é que terá o direito de confirmar a existência de tratamento dos seus dados pessoais, acessar, corrigir, anonimizar, bloquear ou eliminar os dados pessoais, além de solicitar a portabilidade, obter informações sobre o compartilhamento de dados e revogar o consentimento dado anteriormente.

Segundo uma pesquisa realizada pela Capterra, somente 40% dos pequenos e médios empresários estão totalmente preparados para a LGPD no Brasil. Como explica a advogada especialista em Direito Digital Flávia Carvalho, a lei vale para todo mundo, inclusive para lojas físicas. “Ela aplica-se apenas quando o tratamento de dados tiver fins econômicos”, explica. “Por exemplo, se eu pegar vários dados pessoais para fazer um churrasco beneficente, tudo bem, porque eu não estou visando ganhar dinheiro com isso ou obter alguma vantagem econômica”, complementa.

Entendendo os objetivos desta lei, entende-se que ela se aplica aos dados pessoais de indivíduos localizados. Ou seja, quando o tratamento desses dados se dá no Brasil e na oferta de bens e serviços para indivíduos no Brasil. A lei não vai tratar somente de dados de brasileiros e sim de todo indivíduo que estiver em território brasileiro.

A lei de proteção de dados não vai se aplicar a:

  • Dados oriundos destinados a outros países que apenas transitem pelo território brasileiro;

  • Uso pessoal ou não comercial;

  • Fim jornalísticos;

  • Fins acadêmicos;

  • Fins de segurança pública.

Como uma empresa deve se adequar à LGPD

A especialista Flávia Carvalho afirma que, após o entendimento do que é a Lei Geral de Proteção de Dados, o primeiro passo para a conformidade é a revisitação de contratos. “É preciso olhar cada um desses documentos e atuar preventivamente, ou seja, procurar brechas de dados”, aconselha a advogada. “O objetivo é que o cliente seja informado quais dados estão sendo coletados e qual a finalidade deles”.

O recomendado é que as mesmas pessoas responsáveis pela revisitação de contratos elejam um profissional que ficará encarregado, um Data Protection Officer, que pode ser uma pessoa física ou jurídica. O DPO será o ponto de contato dos titulares desses dados e das autoridades de fiscalização. Diante desse entendimento, a empresa precisa começar a trabalhar para adequação aos princípios da lei e também procurar um advogado especialista para tal.

A pessoa eleita como DPO da empresa precisa identificar quem utiliza sistemas, que tipos de dados cada sistema possui e armazena. Também deve identificar quem trata os dados pessoais (nome, CPF, RG, endereço, telefone, e-mail) e dados mais sensíveis (origem étnica, orientação sexual, religiosa, dados biométricos), além da forma como estes dados são trabalhados, se esses dados são transmitidos de alguma forma internamente ou externamente.

Quais são as penalidades da LGPD?

Como lembra a advogada Flávia Carvalho, o prazo para a LGPD entrar em vigor ainda está indefinido. “Muitos defendem o adiamento justamente por causa da crise da COVID-19 e porque o órgão fiscalizador ainda não foi completamente formado”, explica ela. A entrada em vigor está marcada para 3 de maio de 2021.

As penalidades para a não-adequação da Lei Geral de Proteção dos dados são:

  • Uma advertência;

  • Multa de até 2% do faturamento da pessoa jurídica no seu último ano de exercício (com uma limitação de 50 milhões de reais por infração);

  • Multa diária observando a limitação citada acima;

  • Bloqueio dos dados pessoais;

  • Eliminação desses dados pessoais da base de dados da instituição;

  • Suspensão ou proibição da atividade de tratamento desses estados;

  • Publicização da infração.

É importante ressaltar que a lei não foi criada para vedar o uso dos dados pessoais pelas empresas, mas sim para estabelecer princípios e regras para o tratamento desses dados. Caso tenha dúvidas, a Viceri conta com um time de especialistas para ajudar a sua empresa a entrar em conformidade com a nova lei de proteção de dados.

Inteligência Artificial: como ela agrega valor ao seu negócio e aos seus clientes

A inovação é o que ajuda as pessoas a viverem melhor. A tecnologia possibilita novas oportunidades e faz com que as empresas desenvolvam novos produtos e serviços. Inovação e tecnologia, juntas, possibilitaram a Inteligência Artificial (IA), que faz com que máquinas aprendam com experiências, se ajustem e se adaptem a novos dados, além de serem capazes de performar com exatidão em tarefas cotidianas.

A ideia de Inteligência Artificial é relativamente antiga. Nasceu por volta da década de 50, e posterior a ela a ideia de aprendizagem de máquina – ou Machine Learning – por volta da década de 60. 

Como toda a história da evolução humana, onde há problema, ali existem pessoas procurando soluções. A IA surgiu da necessidade de descobrir resoluções de problemas e métodos simbólicos. 

Depois disso, o Departamento de Defesa dos EUA começou a treinar computadores para imitar o raciocínio básico humano. A Defense Advanced Research Projects Agency (DARPA) conseguiu, através da IA, mapear ruas nos anos 70 e, bem antes de conhecermos a Siri, já haviam sido criados assistentes pessoais inteligentes. 

Porém, naquela época, os recursos computacionais não eram tão avançados e a quantidade de dados não era tão grande e disponível para realizar 100% da prática desses conceitos. 

Foram esses primeiros pequenos passos que construíram essa trajetória sólida para o raciocínio formal e a automação que hoje conhecemos nos computadores – sistemas de apoio à decisão e sistemas de pesquisa inteligentes que potencializam a capacidade humana.

A Inteligência Artificial é uma subárea da ciência da computação e mesmo assim é bem ampla. Ela é uma tecnologia que tem o propósito de simular o processo humano para tomada de decisões. Isso se dá através de vários dados e suas previsões podem ser feitas através de machine learning, redes neurais e outras técnicas. 

Os principais conceitos da Inteligência Artificial

Antes de você saber como a IA agrega valor ao seus negócios e aos negócios dos seus clientes, é preciso entender alguns dos principais conceitos que estão envolvidos nestes processos.

Para isso, conversei com o Gestor do Núcleo de Tecnologia da Informação da Universidade Federal de Santa Maria, unidade de Palmeira das Missões, Heitor Scalco Neto. Ele elencou e descreveu os principais conceitos a seguir:

Big Data 

O termo “Big Data” pode ser entendido como a capacidade de analisar uma enorme quantidade de dados, com objetivo de obter informações importantes sobre um negócio ou situação. Essas informações muitas vezes são impossíveis de serem extraídas com uma quantidade reduzida de dados.

A aplicação de Big Data tem um grande potencial e ignorá-la pode ser um erro, visto que com a enorme quantidade de dados disponíveis podemos prever tendências e mudanças no mercado, comportamento de compra dos clientes e, até mesmo, a efetividade das suas campanhas de marketing. Exemplos de aplicações envolvendo Big Data podem ser:

          – Identificar falhas de produção em tempo real;

         – Criar anúncios baseados no histórico de compra dos clientes;

         – Acusar fraudes (Ex.: Cartões de crédito);

         – Identificar performance anormal de indicadores de gestão;

         – Alertar gestores sobre previsões financeiras.

A Netflix, por exemplo, gera um histórico de utilização dos seus clientes. Com o passar do tempo, ela já tem dados suficientes para criar modelos preditivos para novos produtos e serviços, classificando os principais atributos de produtos ou serviços passados. Com informações como: público-alvo, preferência de gênero e duração média dos episódios assistidos, fica fácil para a Netflix saber como será a sua próxima série ou filme lançado.

Machine Learning

Já a técnica de Machine Learning ou, no português, Aprendizado de Máquina, utiliza conjuntos de dados (assim como o Big Data) para ensinar a máquina padrões existentes nesses dados. Por exemplo, posso ensinar a uma máquina qual é o padrão de qualidade de um produto que sai da linha de produção. Com isso, automaticamente posso descartar produtos defeituosos, melhorando assim a qualidade de entrega aos clientes.

Quando falamos de Machine Learning a regra é: quanto mais dados sobre determinada situação eu tiver, melhor. É por esse motivo que Big Data pode ser muito bem utilizado com Machine Learning.

O aprendizado de máquina é feito, geralmente, por regressões matemáticas, onde todas as amostras de dados são apresentadas e testadas incansavelmente, até que um padrão seja estabelecido. Porém, existem também outras formas de aprendizado. Modelos de classificação, por exemplo, são frequentemente utilizados. 

Deep Learning 

Deep Learning pode ser entendido como um subgrupo de Machine Learning, já que utiliza uma técnica de Machine Learning chamada Redes Neurais Artificiais. Essa técnica tenta imitar o comportamento do cérebro humano, formando uma rede de neurônios com várias “sinapses”. Conforme a imagem abaixo, as informações X0, X1, X2 … Xn, entram em todos os neurônios. Em cada neurônio é formado um coeficiente de peso que aquela informação. 

Quanto maior peso uma informação tiver, mais relevante ela é para que o resultado seja alcançado. Após todos os dados passarem repetidas vezes por este processo, um padrão é estabelecido.

Fonte da imagem: https://bit.ly/2VwDBNo

 

 NLP 

O Natural Language Processing ou, no português, Processamento de Linguagem Natural, é uma técnica de Inteligência Artificial que tem como objetivo fazer as máquinas entenderem a linguagem dos seres humanos. Essa compreensão da linguagem está relacionada ao reconhecimento do contexto, análise sintática, semântica e morfológica (assim como as sugestões de correção do Microsoft Word), fazer resumos, interpretar os sentidos, analisar sentimentos e aprender conceitos.

Esse tipo de técnica é utilizada, por exemplo, ao fazer um pedido para os equipamentos de automação, assim como Alexa e Apple Home.

As principais soluções práticas de IA nas empresas

Utilizar Inteligência Artificial é um caminho sem volta. O leque de oportunidades existentes com a implementação de IA nos negócios é amplo. Segundo Heitor Scalco Neto, ela é tão importante para as empresas pois representa a melhora contínua dos seus processos.

“A empresa pode oferecer melhores recomendações de produtos para os clientes, automação dos atendimentos via chat bots, detecção de falhas de produção, detecção de comportamento anômalo de funcionários e até mesmo previsões de vendas para os próximos anos, considerando possíveis crises econômicas”, afirma.

Por fim, a criação de sistemas de recomendação com Inteligência Artificial pode ser um excelente ponto de referência para gestores de todas as áreas, desde a área de vendas até o chão de fábrica.

Existem vários cases de sucesso com a implementação de IA em empresas, como por exemplo:

  • Automação de atendimento ao cliente (Chat Bots);

  • Sistemas de recomendação (compra e venda de ações);

  • Segurança da Informação (Firewalls e Detectores de Intrusão Inteligentes);

  • Definição de estratégia de vendas e marketing baseado no perfil dos clientes;

A implementação desses cases permitiu que as empresas pudessem definir as melhores estratégias para a gestão e planejamentos futuros.

Categorizando a Inteligência Artificial

A Inteligência Artificial pode ser categorizada em três tipos teóricos importantes. São eles:

Inteligência cognitiva: É um conceito mais avançado do que a Inteligência Artificial. As técnicas de IA aprendem um padrão e seguem aquele mesmo padrão, até que um novo treinamento da técnica seja realizado. No caso da inteligência cognitiva é um pouco diferente. Além da técnica aprender padrões, ela tem capacidade de agir com base no aprendizado e raciocínio, sendo capaz de fazer deduções e ampliar conhecimentos. Como exemplo de aplicação, podemos citar um sistema que gerencia a frota de uma empresa, podendo solicitar o agendamento da manutenção preventiva, prever problemas e solicitar peças automaticamente.

Inteligência emocional: A Inteligência Artificial Emocional é a capacidade da tecnologia reconhecer emoções nos seres humanos. A partir da imagem do rosto das pessoas, é possível reconhecer emoções como: raiva, temor, desejo, alegria, medo, ódio, amor, entre outros. Esse tipo de aplicação tem sido muito utilizada em videogames, diagnóstico médico, educação, segurança automotiva e recrutamento de pessoal.

Inteligência humanizada: A Inteligência Humanizada traz com ela a inteligência social, que tem autoconsciência e é adaptável. Porém, ainda estamos muito longe dela. Conseguimos copiar os aspectos cognitivos e até mesmo emocionais do ser humano, mas ainda não conseguimos tornar robôs, humanos.

Para facilitar, vamos dar um exemplo: pense num robô, programado para executar uma atividade definida e repetitiva em uma linha de montagem. Podemos dizer que esse sistema automatizado possui uma IA fraca, pois apenas realiza as ações que estavam programadas.

Por mais que o robô tenha algumas opções automatizadas para casos de erros, baseados em seus sensores, ele não pensa e não consegue tomar uma decisão que não tenha sido programada. Por outro lado, uma IA forte sugere um sistema que consegue perceber o ambiente e é capaz de generalizar tomando uma ação não premeditada. Nesse caso esse sistema foi treinado para isso.

Com tudo que falamos aqui, fica claro que o objetivo da Inteligência Artificial é fornecer softwares que raciocinem sobre entradas e justifiquem saída de dados. Ela possibilita interações quase humanas, e, mais do que isso, serve de apoio para tarefas específicas e soluções cotidianas.  Quer saber mais? Envie uma mensagem para a gente e saiba mais sobre como levar essa metodologia de trabalho para a sua empresa.

Engenharia de features e dados: como ter um aprendizado de máquina eficiente

A engenharia de features é o que vai ensinar como ter um aprendizado de máquina eficiente. Assim, de forma bem direta. E é dessa forma direta que faço a seguinte pergunta: quanto mais features, melhor? 

Antes de dar um overview sobre a engenharia de features, é importante entendermos algumas definições. Suponhamos que se tenha dados brutos tabulados – ou em um banco de dados – para servir de input para uma análise de um treinamento de aprendizado. 

Estes dados tabulados seriam compostos por linhas e colunas, onde as colunas representariam os atributos, e as linhas as instâncias – ou seja, a quantidade de exemplos para o conjunto de atributos. 

Os atributos portanto, representam a propriedade de um objeto e definem um valor específico para uma certa instância. Só que nem todos os atributos devem estar presentes nesse conjunto de dados, ou dataset.

Por exemplo: para se fazer uma previsão de ocorrência de acidente de trânsito, baseada nos atributos dos clientes, podemos perceber que os atributos CPF e RG não fazem diferença, e na verdade podem até atrapalhar a construção do aprendizado de uma rede neural. Neste sentido, utilizamos a palavra feature para definir um atributo que tenha mais importância e mais significado. 

Então, respondendo a pergunta acima: não necessariamente. Mais features precisam de maior monitoramento e com isso mais engenharia.

É e dessa forma que começamos a falar sobre o processo de engenharia de features, que tem por objetivo filtrar ainda mais essas features. Existem casos em que necessitamos expandir, selecionar ou excluir algumas delas. Como a feature idade, que pode ser excluída se tivermos a feature data de nascimento, já que elas são redundantes e o modelo pode não convergir tão bem. 

Agora, vamos por partes. Separei aqui os principais tópicos para discutirmos sobre engenharia de features e dados.

O que são features?

Como já falamos acima, Features ou, em português, características, são fatores utilizados para definir um atributo que tenha mais importância e significado. Podemos ter como exemplo um conjunto de dados utilizado para treinar um sistema de um veículo autônomo, esse conjunto é composto por informações como: 

  • Aceleração;

  • Distância do objeto da frente;

  • Combustível;

  • Temperatura;

  • Tempo de viagem.

 

Cada uma dessas informações é chamada de feature. Para ficar mais claro, conversei com o Gestor do Núcleo de Tecnologia da Informação da Universidade Federal de Santa Maria, unidade de Palmeira das Missões, Heitor Scalco Neto e ele citou o seguinte exemplo:

Imagine uma planilha do Microsoft Excel (Figura 1): no topo há um cabeçalho, informando qual tipo de informação está contida em cada coluna. Sendo assim, cada coluna representa uma feature.

Figura 1: Exemplo de base de dados.

Então o que é a engenharia de features?

O trabalho de engenharia de features consiste em elencar as características mais importantes dos dados e, dependendo do modelo utilizado, normalizar os valores contidos na base de dados. 

A normalização de dados geralmente ocorre com a definição dos valores máximos e mínimos encontrados na base de dados, a partir desse momento é realizado o cálculo para que todos os valores fiquem entre 0 e 1. Para entender melhor, seguimos com os exemplos citados por Heitor:

Vamos iniciar com a feature “Irradiação Solar” (Figura 2), podemos perceber que o maior valor encontrado é “466.375”, que será representado por 1, e o menor valor é “40.775”, que será representado por 0. Na Figura 3 podemos ver a feature “Irradiação Solar” normalizada.

 

Figura 2: Base de dados, obtendo o maior e o menor valor de uma feature.

 

Figura 3: Feature “Irradiação Solar” normalizada.

 

Por que a engenharia de features é importante para um aprendizado eficiente de máquina?

O processo de engenharia de features é a fase mais importante e trabalhosa quando se deseja ter um aprendizado de máquina eficiente. Se, por exemplo, a modelagem estiver razoável, porém, com excelente tratamento dos dados, teremos um melhor resultado do que com uma modelagem excelente e dados com uma preparação mais pobre, seja por inconsistência, ruídos, dados faltantes ou até mesmo pouca quantidade de informação.

Podemos dizer então que é um processo iterativo para transformar dados brutos em características que melhor representam o problema.  Um caso muito comum disso são os modelos de deep learning que recebem dados brutos e internamente já identificam as melhores features como as bordas, linhas e texturas em uma classificação de imagem. 

No processo de engenharia de features, temos primeiro a fase de brainstorming, depois a criação, seleção e avaliação. E esse processo funciona de forma cíclica. 

Na fase de brainstorming, entendemos o domínio do problema, reunindo informações para descobrirmos quais poderiam ser as minhas features. Na fase de criação produzimos as features. Na etapa de seleção podemos remover ou ainda expandir algumas features e na fase de avaliação realiza-se uma estimativa da qualidade do modelo, utilizando as features selecionadas.

Algumas técnicas e algoritmo podem ser usados para a aplicação do processo de engenharia de features. Após a fase de brainstorming, e para a fase de criação, pode se utilizar as técnicas de feature extraction ou feature construction. 

Aqui se trabalha com a etapa de extração do que é mais importante em observações muito volumosas, como mídias. Para esses casos é realizada frequentemente uma redução de dimensionalidade. Essa construção pode ser manual, ou até utilizando a deep learning, numa técnica chamada feature learning. 

Após a etapa de criação pode-se utilizar a técnica de feature importance para pontuar as melhores features, e assim mantê-las ou quebrá-las em mais. Aqui os algoritmos de árvore de decisão, como random forest e gradient boosting machine podem ser utilizados. 

As técnicas de Machine Learning têm uma certa sensibilidade ao aprender o padrão dos dados. Desta forma, o processo de engenharia de features é extremamente importante, pois retira o possível ruído dos dados. Segundo Heitor Scalco Neto, outro processo importante de engenharia de features é a escolha das características mais relevantes. 

“Em vários casos, algumas features ajudam o estabelecimento de padrões, porém, em outros, a utilização de determinadas features acabam atrapalhando o processo de aprendizagem. Isso acontece porque existe um aumento da complexidade do aprendizado e a necessidade de mais amostras de dados, a cada feature adicionada”, destaca. Por isso, deve-se realizar um estudo da importância de cada feature antes de utilizá-la no treinamento da técnica de Machine Learning.

Exemplos sobre o uso de dados na engenharia de features

Podemos dividir os dados em qualitativos e quantitativos. Dados qualitativos podem ser nomes de categorias, clientes, produtos ou qualquer dado descrito com uma ou mais palavras. 

Eles ainda podem ser separados em nominais – quando não se tem ordem, por exemplo idiomas ou cores – e ordinais – quando existe uma ordenação, como por exemplo o nível de escolaridade.

Já os dados quantitativos são expressos por numerais, geralmente são features que possuem um valor de distância entre si, por exemplo: tensão elétrica, quantidade de casos de determinada situação, área construída, dimensões e etc.

São números que podem ser discretos – geralmente definem quantidade de algo – ou contínuos – podendo ser ainda em intervalos como range de temperatura, ou em proporções como peso, altura, comprimento.

Esses dados são importantes porque evitam problemas com cálculos estatísticos. Pense num caso de se atribuir o valor (1) para graduação, (2) para mestrado e (3) para doutorado. Isso não quer dizer que doutorado é três vezes a graduação. 

Diversas técnicas de estatísticas são utilizadas nesta fase de pré-treinamento, sendo a medida do coeficiente de correlação uma das mais frequentes.

Gostou do artigo e quer saber mais? Envie uma mensagem para a gente e saiba mais sobre como levar essa metodologia de trabalho para a sua empresa.