Fluência em Dados
Fluência em Dados
PHYTON
Python é uma linguagem simples, uma ferramenta.
Lógica de programação
Dar ordens seguindo uma sequência de passos lógicos.
A lógica é um encadeamento de raciocínios coerentes com um determinado objetivo,
geralmente comunicado com uma sequência de passos ou instruções, sendo que a
instrução é um conjunto de regras ou normas simples e bem definidas para a realização ou
emprego de algo, indicando ao computador uma ação ou função elementar a ser executada.
O conjunto de instruções compõem os algoritmos, que podem ser definidos como conjunto
pré-determinado e bem definido de instruções utilizado para a solução de um problema,
com um número finito de etapas. (Algoritmo = lista de procedimentos bem definida, que
pega algum valor, ou conjunto de valores, como entrada e produz algum valor ou conjunto
de valores como saída.)
Os softwares são apenas algoritmos.
» Representação de algoritmos
● Linguagem Natural (Descrição Narrativa): trata-se da maneira como expressamos
nosso raciocínio e trocamos informações. Envolve a língua falada, gestos e
posturas. Raramente constitui um sistema de regras rígidas e estruturadas que
possa ser implementada numa máquina ou que possa ser transcrita logicamente,
visto que apresentam mensagens ambíguas e não estruturadas.
● Linguagem de Máquina: é a linguagem padrão de funcionamento das máquinas. É
composta somente por números, representados de forma binária (0 e 1), que
representam as operações e os operados que serão usados no processo do
programa. (Os computadores só podem executar diretamente os algoritmos
expressos em Linguagem de Máquina. Não é produtivo, demora muito para o
operador efetivamente "dizer" o que ele quer.)
● Linguagem de Montagem (Assembly): é representada por comandos, mas que
reproduz as tarefas que serão executadas dentro do computador, mas ainda com
grau baixo de compreensão.
● Linguagem de Programação: é um meio termo entre a linguagem de máquina e a
linguagem natural. As linguagens mais parecidas com a linguagem de máquina são
classificadas como linguagens de baixo nível, e as mais parecidas com a linguagem
natural são classificadas como linguagem de alto nível. Para que possa ser
compreendida pelo computador, deve ser traduzida em código de máquina antes de
ser executada.
print(‘Ólá, Estratégia Concursos’)
Linguagem de Programação > compilador ou interpretador (pega a Linguagem de
Programação e transforma/traduz em Linguagem de Máquina - escreve em 0 e 1) >
Linguagem de Máquina
Um código-fonte é uma versão de software da forma em que ele foi originalmente
escrito por um programador formando o algoritmo e utilizando linguagens de
programação (é o código escrito em alguma linguagem de programação).
A linguagem de programação trouxe agilidade ao processo de desenvolvimento de
software e portabilidade, visto que, como contém somente instruções abstratas,
pode ser executado em qualquer processador ou máquina.
● Pseudocódigo: é uma linguagem intermediária entre a linguagem natural e a
linguagem de programação; utiliza um conjunto restrito de palavras-chave, em geral
na língua nativa do programador, que tem equivalentes nas linguagens de
programação. Não possui rigidez sintática necessária em uma linguagem de
programação, permitindo que um aprendiz se atenha à lógica do algoritmo e, não, ao
formalismo da sua representação. Funcionam como instrumento pedagógico para
introdução à lógica de programação. No Brasil, costuma-se utilizar o Portugol.
» Conceitos básicos
Toda linguagem tem:
● Constantes: são dados que possuem um valor fixo que não podem variar no tempo.
(ex: pi)
● Variáveis: são pontos de armazenamentos associados a posições de memórias. O
seu nome (identificador) aponta para uma posição de memória, abstraindo-a e
facilitando a interação com o usuário. O conteúdo de uma variável pode ser alterado,
consultado ou apagado diversas vezes durante a execução de um algoritmo ou
programa, porém o valor apagado é perdido.
● Atribuição: consiste em atribuir um valor a uma variável, armazenando o conteúdo
em um endereço específico. Cada linguagem de programação tem a sua forma de
representá-la. Ex: DT_Nasc <- 24071982
● Tipos de dados
○ Simples: não podem ser decompostos
■ Inteiro (Integer): são similares aos números inteiros de matemática.
Podem ser positivos, negativos ou nulos.
■ Real (Float, Ponto Flutuante): são similares aos números reais da
matemática.
■ Caractere (Literal, Char): são representações de letras, dígitos e
símbolos. Quando colocadas em conjunto formam um tipo estruturado
chamado String ou Cadeia de Caracteres.
■ Lógico (Boolean): são representações de valores lógicos - sim/não,
verdadeiro/falso, ligado/desligado
○ Compostos: podem ser decompostos
■ Cadeia de caracteres (String): são representações de sequências de
caracteres, incluindo ou não símbolos
● Operadores
○ Aritméticos: são utilizados para obter resultados numéricos
Símbolo Significados
- Subtração
+ Adição
* Multiplicação
/ Divisão
Multiplicação lógica E
Adição lógica OU
Negação NÃO
● Bloco de Comandos: é um conjunto de comandos limitados por dois delimitadores
que marcam o início e o fim do bloco. O bloco pode apresentar um ou mais
comandos e, quando tem apenas um, os delimitadores são opcionais. Geralmente
os delimitadores são: {...} ou begin … end.
● Estruturas de seleção (ou de decisão): permitem interferir na sequência de
instruções executadas dependendo de uma condição de teste.
SE… Então (If… Then)
SE… Então… Senão (If… Then… Else)
Seleção aninhada
● Estruturas de repetição: essas estruturas são utilizadas quando se deseja que um
determinado conjunto de instruções ou comandos sejam executados por mais de
uma vez.
○ pré-testado: a variável testada deve sofrer alguma alteração dentro do bloco
da estrutura de repetição sob pena de a execução não ter fim.
While … do
○ com variável de controle: não há outros testes de condição de saída a não
ser a contagem da variável de controle, as instruções que fazem parte do
bloco de execução da estrutura de repetição não precisam alterar a variável
de controle, pois a própria estrutura o faz.
for
○ pós-testadas: a instrução é executada ao menos uma vez.
Do… While
● Recursividade: quando uma função chama a si mesma.
Python
É uma linguagem simples, clara, poderosa e objetiva.
É multiplataforma, podendo ser utilizada no Windows, Linux, MacOS etc.
Fácil de aprender e extremamente semelhante com o inglês comum. Sua sintaxe permite
escrever softwares com menos palavras e linhas que outras linguagens semelhantes.
» Características
● Alto nível: trata-se de uma linguagem de alto nível, pois seu nível de abstração é
bastante elevado, bem longe do código de máquina e mais próximo da linguagem
humana. Python está muito mais próximo à forma humana de pensar/escrever do
que dos comandos entendidos por um processador.
● Interpretada: Trata-se de uma linguagem interpretada, pois seu código-fonte é
executado linha a linha por um interpretador (software que traduz uma linguagem em
outra) e depois pelo sistema operacional, isto é, seu código-fonte não precisa ser
totalmente transformado em código de máquina para somente depois ser executado.
(interpretador ≠ compilador, este varre o código todo de uma vez e alerta se houver
erro, transforma tudo em linguagem de máquina de uma vez só; enquanto que
aquele o faz linha a linha)
● Multiparadigma: trata-se de uma linguagem multiparadigma, pois suporta mais de
um paradigma de programação. No caso, eles são: imperativo, procedural, funcional
e orientado a objetos. Paradigmas são formas diferentes de resolver problemas -
alguns utilizam funções, outros utilizam objetos, outros usam procedimentos e assim
por diante.
● Case sensitive: trata-se de uma linguagem case-sensitive, isto é, capaz de
diferenciar maiúsculas e minúsculas. Isso significa que as variáveis nome, Nome e
NOME são diferentes entre si, uma vez que possuem diferenças de caixa em sua
grafia.
Apresenta tipagem dinâmica (duck typing - permite a alteração de tipo de variável durante a
execução do código-fonte) - não é preciso fazer declaração de variáveis separada e
atribuição de tipo separada (tipagem dinâmica).
var1 = 'Diego'
var1= 202
Apresenta tipagem forte (não permite conversão implícita de tipos). Não permite, por
exemplo, a operação abaixo:
var2 = '20'
print(10 + var2)
Há legibilidade dos programas escritos, pois não usa marcadores como ponto (.) ou ponto e
vírgula (;) no fim de cada linha, além dos marcadores de início e fim de bloco como chaves
({ }) ou palavras especiais (begin/end), como outras linguagens utilizam. Python não utiliza
nenhum marcador textual para delimitar blocos. Utiliza apenas a profundidade da
indentação (alinhamento das instruções correlatas). (Permite utilizar ponto e vírgula (;) para
delimitar comandos, mas de forma opcional.)
É distribuída sob uma licença própria (compatível com a GPL), que permite a distribuição -
comercial ou não - tanto da linguagem quanto de aplicações desenvolvidas nela, em
formato binário ou código fonte, bastando cumprir a exigência de manter o aviso de
copyright. (É um software livre, de código aberto.)
Permite que programas sejam compilados para um formato portável chamado bytecode.
Essa característica faz com que programas escritos nessa linguagem com uma biblioteca
padrão sejam executados da mesma forma em diversos sistemas operacionais que
possuam um software interpretador de Python.
Possui uma interface com muitas bibliotecas e sistemas de janela, sendo extensível em
C/C++. Além disso, pode ser utilizada como linguagem de extensão para aplicações que
necessitam de uma interface programável (muito comum em aplicativos, jogos,
processamento de textos, dados científicos e motores de busca).
Possui funcionalidades para expressões regulares; sockets; threads; data/tempo;
analisadores XML; analisadores de arquivos de configuração; manipulação de arquivos e
diretórios; persistência de dados; unidades de testes; bibliotecas clientes para os protocolos
HTTP, FTP, IMAP, SMTP e NNTP.
Suporta o paradigma orientado a objetos com todos os seus componentes, tais como
herança (simples ou múltipla), polimorfismo, sobrescrita, encapsulamento, abstração,
reflexão, introspecção etc. (Não é necessário entender o que isso significa exatamente,
apenas saber que Python suporta e que tudo nele é um objeto.)
Tem suporte a herança múltipla.
Na virada da versão do Python 2.x para Python 3.x, ocorreram algumas mudanças. A mais
importante delas é: print mudou de instrução para função e agora precisa de parênteses:
print 'Olá Mundo' # até versão 2.7
print('Olá Mundo')# a partir da versão 3.0
» Operadores
● Operadores matemáticos
» Funções
Uma função é um bloco de código que é executado apenas quando é invocado.
Os três passos são:
1 - uma função é invocada;
2 - é passado algum dado como parâmetro ou não;
3 - e algum dado é retornado como resultado.
É preciso sempre estar atento ao escopo da variável, ou seja, a região em que ela existe.
Exemplo:
Existem ainda as funções/expressões lambda que são pequenas funções anônimas. Elas
são funções de uma única linha, isto é, não possuem nome e são declaradas como
variáveis, sua sintaxe não utiliza a palavra chave def e nem utiliza a palavra return antes do
comando porque se considera que haverá um retorno implícito. São úteis principalmente
nos casos em que precisamos de uma função para ser passada como parâmetro para outra
função e que não será mais necessária após isso - como se fosse "descartável". (É uma
opção dentre tantas outras possíveis.)
» Comentários
São utilizados para adicionar descrições em partes específicas do código, seja para
documentá-lo, seja para descrevê-lo, ou mesmo para marcar que uma determinada linha ou
um conjunto de linhas não deve ser executado.
No caso do Python há anotações diferentes para comentários de uma única linha e
comentários de mais de uma linha. Caso você deseje fazer um comentário de apenas uma
linha, pode utilizar o caractere cerquilha (#). Tudo que estiver à frente desse caractere deve
ser ignorado pelo interpretador. Caso você deseje fazer um comentário com mais de uma
linha, pode utilizar aspas triplas (simples ou duplas).
» Identificadores
No Python, as variáveis são consideradas um tipo de objeto (já vai ser armazenada na
memória como um elemento) e não precisam ser previamente declaradas (variáveis podem
ser declaradas a qualquer momento). Exemplo:
nome = 'Emannuelle'
É possível fazer várias atribuições de variáveis em uma mesma linha, bastando separar os
identificadores por vírgula do lado esquerdo da atribuição e manter a mesma ordem no lado
direito. Exemplo:
nome, altura = 'Emannuelle', 170
Identificadores de variáveis válidos devem obedecer às seguintes regras:
- começar necessariamente com uma letra ou _ (underline)
- jamais devem começar com um número (e não pode conter espaço em branco)
- conter caracteres alfanuméricos e underlines (a-z, A-Z, 0-9 e _)
- são case-sensitive (ou seja, são capazes de diferenciar maiúscula e minúscula)
Obs.: Essa mesma regra vale para identificação de funções, classes, módulos e outros.
Python possui uma função chamada print(), responsável por imprimir na tela do
computador o valor de uma variável.
Para imprimir um texto junto com o valor de uma variável, basta utilizar o caractere +. Esse
caractere serve tanto para somar o valor de variáveis quanto para realizar concatenações.
» Tipos de dados
ATENÇÃO:
➔ O tipo booleano só representa dois valores (True ou False). "False" é diferente de
False - o primeiro é uma string e o segundo é um booleano. [Não confundir com a
função bool - bool() -, que retorna True ou False de acordo com o parâmetro de
entrada. Ela retorna False nos seguintes casos: bool(), bool(0) e bool(False).]
➔ Os números podem ser inteiros, ponto flutuante ou complexos. Inteiro é um número
positivo ou negativo sem decimais (ex: 2, -50, 137). Ponto flutuante é um número
positivo ou negativo com um ou mais decimais (ex: -0.5, 3.1415, 137.0). Complexo é
um número escrito com a letra j para indicar a parte imaginária (ex: 8j)
➔ Variáveis textuais/literais são cadeias de caracteres chamadas de string. Os valores
podem vir dentro de aspas simples ou aspas duplas, e os caracteres que compõem
uma string podem ser acessados individualmente - bastando usar colchetes [ ].
» Casting
É um recurso que permite definir ou converter o tipo de uma variável, geralmente utiliza as
três funções a seguir.
» Estrutura de dados
Os dados vistos até aqui são capazes de armazenar um único dado, mas para armazenar
múltiplos itens dentro de uma única estrutura, utilizamos estruturas de dados que no Python
são chamadas de coleções (collections).
Coleção é um contêiner utilizado para armazenar uma coleção de dados ou conjunto de
valores.
Lista Tupla Conjunto Dicionário
ordenados X X
mutáveis X X X
indexáveis X X X
por inteiro por inteiro por string
valores duplicados X X
➔ Lista: é uma coleção de valores ordenados, mutáveis e indexáveis (por valores
inteiros) que pode conter valores duplicados. São delimitados por colchetes. Cada
item da lista pode ser referenciado por um valor inteiro chamado índice e que inicia
pelo 0 (zero).
➔ Tupla (ou sequência): é uma coleção de valores ordenados, imutáveis e indexáveis
que pode conter valores duplicados. São delimitadas por parênteses, mas o índice
sempre será representado entre colchetes. São parecidas com listas: a forma de
acessar é semelhante, existem índices negativos, é possível acessar uma extensão
de índices, mas são imutáveis, ou seja, uma vez criada não pode mais ser
modificada.
Não é obrigatório o uso de todas as estruturas e, caso haja apenas uma instrução a ser
executada, é possível escrever tudo na mesma linha.
if idade >= 18: print("Maior de Idade")
else: print("Menor de Idade")
~ Estruturas de repetição (While) são extremamente úteis para que possamos repetir
passos até que uma determinada condição seja atendida. É obrigatória a existência da
condição de controle para que o computador saiba a hora de sair do laço (loop) e de uma
variável de controle chamada, muitas vezes, de contador.
BREAK = parada, saia, não faça, interrompa a execução (quando atender à condição,
encerre o laço)
CONTINUE (o contrário de break) = siga
No FOR, a interação é realizada sobre itens de listas, tuplas, sets, dicionários ou até mesmo
strings. Não necessita declarar uma variável de controle.
PLN (Programação em Linguagem Natural)
Processamento de Linguagem Natural é um campo interdisciplinar da inteligência artificial
(derivação da IA) que combina ciência da computação e estudos de linguística com o intuito
de interpretar e reproduzir a comunicação humana natural em todas as suas nuances e
ambiguidades.
Através da criação de estruturas como Árvore de Análise Sintática (Parse Tree) e grafos de
conhecimentos em geral pode-se ensinar a máquina a entender e a reproduzir a linguagem
humana.
Muitas vezes, é utilizada a velha técnica do dividir para conquistar.
Utilizado em: corretores ortográficos, filtros de spam, ferramentas de tradução, função
auto-complementar, bots de mensagens e assistentes virtuais.
ChatBot - Em 1994, Joseph Weizenbaum criou um software chamado Eliza (considerado
como o primeiro chatbot do mundo e usado para simular a conversa entre um paciente e
sua psicóloga/terapeuta). Ela recriava frases baseadas em palavras-chaves ditas pelo
usuário para estabelecer diálogo com ele. Essa técnica seria impraticável pelas atividades
mais elaboradas e atualmente a abordagem mais utilizada é o Machine Learning (ML). Com
essa técnica, a própria conversa entre os humanos vai treinando a máquina, gerando um
feedback positivo em que ela é capaz de analisar elementos e melhorar, cada vez mais, seu
retorno.
Muitos preveem que as tecnologias de fala se tornarão uma forma de interação tão comum
quanto teclas, teclados, trackpads e outros dispositivos físicos de entrada e saída que
usamos hoje.
» Pré-processamento
Para modelar uma linguagem e possibilitar que um computador a entenda, são necessários
pré-processamentos que abstraem e estruturam a linguagem, deixando apenas o que é
informação relevante, ou seja, busca extrair de textos uma representação estruturada e
manipulável que identifique o subconjunto mais significativo de informações, isto é, obter
uma representação com qualidade melhor que a qualidade inicial.
O pré-processamento envolve intrinsecamente o conceito de normalização (fazer com que o
fim seja mais limpo que o início) que remove ruídos e transforma um texto para um formato
normal de forma que uma máquina possa detectar padrões. Basicamente dois elementos
são normalizados: estrutura e vocabulário. Para isso, são utilizadas técnicas de
pré-processamento.
~ Tarefas da normalização
- Tokenization: a tokenização é a segmentação de palavras, quebra a sequência de
caracteres em um texto identificando as palavras existentes com o seu respectivo
início e fim. Para fins de linguística computacional, as palavras assim identificadas
são frequentemente chamadas de tokens (que também podem, eventualmente, ser
frases ou parágrafos). Para separar cada token, geralmente são utilizadas quebras
de linhas, espaços em branco ou delimitadores. Existem idiomas (como, por
exemplo, o tailandês) que não realizam separações por espaços ou pontuações,
logo requerem informações léxicas e morfológicas adicionais.
- Stemming: a stemização é o processo que reduz uma palavra ao seu radical,
removendo seus afixos (prefixos, infixos e sufixos), o que reduz o ruído,
aleatoriedade ou variedade de informação a ser processada pela máquina.
- Lemmatization: a lematização é o processo de reduzir uma palavra ao seu lema (sua
forma base, primitiva, nuclear, canônica) e agrupar diferentes formas de uma mesma
palavra ou seus sinônimos. Geralmente verbos ficam no infinitivo, e
substantivos/adjetivos ficam no masculino singular. A lematização aumenta a
abstração reduzindo o vocabulário ao retirar inflexões das palavras e ajuda a
padronizar a palavra para um significado comum, estruturando o texto para o
processamento de linguagem natural.
- POS Tagging: Part-Of-Speech Tagging3 é o processo de identificar classes
gramaticais em um texto com o intuito de complementar o processo de extração de
palavras relevantes. Por exemplo: "Cheguei ontem e apaguei" pode ser
representada como "Cheguei/V ontem/ADV e/CJ apaguei/V" (V = verbo, ADV =
advérbio, CJ = conjunção).
- Named Entity Recognition: o Reconhecimento de Entidades Nomeadas é o processo
de reconhecer entidades em um texto, tais como pessoas, datas, organizações,
localizações e outros, ajudando a criar os Grafos de Conhecimento.
- Stopwords Removal: stopwords são palavras que podem ser consideradas de pouco
valor para o entendimento do sentido de um texto, isto é, palavras semanticamente
irrelevantes, como artigos, preposições, pronomes e conjunções.
~ Semântica vetorial
As palavras existem para nos prover significados, porém seus significados não são únicos.
O postulado que fundamenta todo o ramo de semântica estatística se chama Hipótese
Distributiva (quanto mais semanticamente semelhantes forem duas palavras, mais
semelhantes em termos de distribuição elas serão e, portanto, mais tenderão a ocorrer em
contextos linguísticos semelhantes - palavras que aparecem em contextos semelhantes
tendem a ter significados semelhantes).
Semântica de vetores é a técnica que permite que computadores compreendam o
significado de palavras por meio de vetores, sendo que vetor é a estrutura de dados que
armazena uma coleção de elementos que podem ser identificados por meio de um índice ou
uma chave.
Baseado nessa técnica, um computador pode capturar o significado de uma palavra por
meio de sua distribuição no uso da linguagem, isto é, por meio das palavras ao redor
(chamado de contexto ou ambiente gramatical). O ato de embutir palavras dentro do espaço
de um vetor é conhecido como Word Embedding.
Vetores podem ter várias dimensões, como vetores unidimensionais, bidimensionais
(matrizes), tridimensionais… Os vetores podem representar coordenadas e, por isso, é
possível representar quão frequentemente palavras co-ocorrem por meio de uma Matriz de
Co-ocorrência. Existem dois tipos dessa matriz: Termo-Documento e Termo-Termo.
Na Matriz Termo-Documento, cada linha da matriz representa um documento. Nesse
contexto, uma matriz é um vetor bidimensional semelhante a uma tabela; um termo é uma
palavra do vocabulário; e um documento é um registro escrito sobre qualquer assunto.
cada linha representa um termo; cada coluna representa um documento; uma matriz é
formada por um conjunto de vetores (cada coluna da matriz acima é um vetor) - a palavra
"bobo" aparece mais vezes nos dois primeiros documentos, então eles devem ter contextos
similares, assim como os dois últimos devem possuir características comuns, já que é neles
que a palavra "batalha" aparece mais vezes (palavras semelhantes aparecem em contextos
semelhantes)
como uma matriz é formada por um conjunto de vetores, cada peça (documento) pode ser
representada por um vetor de quatro posições
Pode-se pensar em um vetor para um documento como um ponto em um Espaço
V-Dimensional2. No esquema acima, há quatro pontos/palavras para cada documento, logo
há um espaço 4-Dimensional (ou tetradimensional) - cada palavra é uma dimensão.
Na Matriz Termo-Termo (ou Matriz Palavra-Palavra ou Palavra-Contexto) possui ambos os
eixos representando palavras.
Em Processamento de Linguagem Natural, textos escritos e registros orais em linguagem
natural que servem de base para análise é chamado de corpus, e um conjunto de corpus é
chamado de corpora. Na prática, corpus são os documentos (também chamados de
datasets).
Essa matriz terá dimensionalidade |V| x |V| e cada célula armazenará o número de vezes
que a palavra da linha e a palavra da coluna co-ocorrem no contexto de alguns corpus.
|V| representa a quantidade de palavras distintas em um conjunto de documentos. Ora, se
os documentos forem livros, existirão uma quantidade imensa de palavras distintas. Logo,
essa matriz será absurdamente gigantesca.
A semântica vetorial tem a vantagem de representar dados por meio de vetores, mas é
claro que é preciso um arcabouço de ferramentas tecnológicas capazes de lidar de forma
eficiente com esse tipo de estrutura de dados.
Nesse tipo de matriz, a representação de uma palavra pode ser calculada a partir de
contagem de sua co-ocorrência com cada palavra do vocabulário em um determinado
contexto. Em contextos muito grandes, é difícil encontrar relações relevantes entre palavras.
É mais interessante utilizar contextos menores, em geral em torno de uma palavra-alvo.
~ Redução de Dimensionalidade
Um corpus real possui milhares de palavras, o que gera matrizes com muitas dimensões e a
imensa maioria dos valores zerados, conhecidas como matrizes esparsas. Isso exige alto
poder computacional para o processamento e, muitas vezes, desnecessariamente.
A Maldição da Dimensionalidade expressa a existência de um número ótimo de
características (também chamada de atributos, colunas ou features) que pode ser
selecionadas em relação ao tamanho da amostra para maximizar o desempenho do
aprendizado. Nesse cenário, torna-se conveniente a aplicação de algum procedimento para
redução da base de dados, seja pela seleção de características originais ou através de
técnicas de redução da dimensionalidade.
A redução da dimensionalidade tem o objetivo de encontrar representações vetoriais menos
complexas, criando novas características sintéticas a partir das originais, transformando
espaços de alta dimensionalidade em espaços de baixa dimensionalidade (duas ou três
dimensões).
Os algoritmos mais conhecidos são PCA (Principal Component Analysis) e t-SNE
(t-Distributed Stochastic Neighbourhood Embedding).
~ Representação com n-gramas
Muitas vezes, é utilizada a probabilidade para descobrir qual a palavra que completa
corretamente uma frase ou expressão.
Muito usada em editores de texto em geral, sistemas de transcrição de áudio, correção
gramatical, tradutores.
Existe um modelo de atribuição de probabilidade a sequência de frases ou palavras
chamado n-grama (ou n-gram). Um n-grama é uma sequência de n palavras: um 2-grama
(ou bigrama) é uma sequência de duas palavras; um 3-grama (ou trigrama) é uma
sequência de três palavras; um 4-grama (ou tetragrama) é uma sequência de quatro
palavras; e assim por diante.
~ Classificação de textos
Aprendizado Supervisionado X Aprendizado Não Supervisionado
No aprendizado supervisionado, um ser humano alimenta o algoritmo com categorias de
dados de saída de tal forma que o algoritmo aprenda como classificar os dados de entrada
nas categorias de dados de saída pré-definidas. Aqui já se definiu quais serão as categorias
de saídas, logo o algoritmo irá receber os dados brutos de entrada, irá processá-los e
aprenderá a classificá-los em cada uma das categorias de saída que foi definida
inicialmente.
No aprendizado não supervisionado, um ser humano não alimenta o algoritmo com
categorias de dados de saída pré-definidas. O algoritmo, por si só, interpreta os dados de
entrada em busca de similaridades, padrões e características em comum, realiza o
processamento e ele mesmo os categoriza sem nenhuma interferência humana durante o
processo.
A classificação de textos trata-se de um processo de atribuição pré-definida (dado que se
trata de um aprendizado de máquina supervisionado) de categorias a documentos baseado
em seus conteúdos a fim de estruturar e analisar textos de maneira automática, rápida e
econômica. É uma das tarefas fundamentais no Processamento de Linguagem Natural com
amplas aplicações em análise de sentimento, detecção de spam, rotulagem de tópicos,
detecção de intenção.
Baseada em regras: textos são separados em um grupo organizado utilizando um conjunto
de regras definidas por um ou mais usuários que analisam uma amostra dos textos
manualmente e as criam para classificar dados. Essa abordagem tem algumas
desvantagens, como a exigência de um esforço manual que pode ser exaustivo no caso de
documentos extremamente grandes e pode gerar falsos-positivos, principalmente por conta
da polissemia (palavras com mais de um significado).
Baseada em aprendizado de máquinas: ao utilizar o processamento de linguagem natural, a
classificação de um texto pode analisar automaticamente um texto e, em seguida, atribuir
um conjunto de categorias pré-definidas (também chamadas de rótulos, classes, tags ou
labels) com base em seu contexto para o treinamento de um algoritmo de aprendizado de
máquina que tem a função de aprender com os dados apresentados e pré-dizer os rótulos
de novas instâncias.
O processo de classificação é dividido em duas etapas: extração e teste. Na etapa de
extração, utiliza-se uma amostra representativa de uma base de dados, conhecida como
conjunto de treino, para extrair um modelo de classificação. Seu objetivo é encontrar um
classificador que identifique a correlação entre as características (features) dos dados e
suas respectivas classes. Para tal, é necessário estruturar o texto como um vetor numérico.
Uma das principais abordagens para representar o texto como um vetor é o BOW - Bag of
Words (Saco de Palavras), que é o processo de contar todas as palavras de um texto. O
nome desse processo é vetorização, isto é, um texto é representado através de um vetor
numérico em que cada posição recebe a frequência referente à ocorrência da palavra no
texto.
Foram perdidas informações contextuais, como a ordem das palavras. Por outro lado, esses
vetores podem ajudar no treinamento de classificadores de texto.
As palavras mais frequentes serão: a, e, de, o, isso, para, que, não, na, no, até, com…
Logo, parte-se do princípio que, se uma palavra aparece com muita frequência, ela é menos
relevante do que palavras que aparecem com baixa frequência. Para resolver esse tipo de
problema, existem técnicas como TF-IDF (que utiliza um peso de acordo com o inverso da
frequência - se uma palavra é pouco frequente em diversos documentos, mas é muito
frequente em um documento específico, provavelmente ela é muito relevante) e PPMI (que
utiliza probabilidade para o cálculo da frequência).
Na etapa de teste, o modelo treinado é avaliado utilizando-se uma porcentagem da base de
dados rotulada/conhecida como conjunto de teste. Se a acurácia preditiva obtida durante a
avaliação do modelo for satisfatória, então ele passa a ser utilizado para fazer a predição
das classes de novas instâncias. Em outras palavras: se for encontrado um conjunto de
classes que consiga abarcar a maioria das instâncias da base, essas classes serão a base
para as novas instâncias. Em suma: algoritmos de aprendizado de máquina permitem inferir
a classificação correta sem que usuários necessitem listar todas as regras manualmente.
~ Análise de Sentimentos
Busca simplesmente utilizar técnicas de aprendizado de máquina para ensinar máquinas a
extrair sentimentos da linguagem natural.
Uma análise básica de sentimentos, a partir de documentos de texto, segue um processo
relativamente simples:
1. Divide cada documento de texto em partes menores (como frases ou palavras);
2. Identifica cada sentimento associado a uma frase ou componente;
3. Atribui uma pontuação com a polaridade de sentimento a cada frase, de -1.0 até
+1.0;
4. Em casos avançados, há combinação dessas pontuações com camadas de Deep
Learning.
Nem toda frase pode ser classificada como positiva ou negativa, existem frases neutras ou
puramente informativas.
Existem diversas formas de classificar sentimentos, como: classificação por polaridade, por
escala, por análise de elementos e aspectos, por análise de humor. Cada uma delas é
indicada para um contexto específico (ex: gestão de crise, panoramas gerais, estudos de
satisfação de marcas, análise de opiniões predominantes para governos e outros).
Apesar de a análise de sentimentos ocorrer, em sua maioria, relacionado a frases, ela pode
se dar em diferentes níveis de granularidade, de forma que, quanto menor a granularidade,
mais específica é a classificação. Dessa forma, ela pode se dar em nível de documento
(análise de um texto como um todo), nível de sentença (análise de frases de um
documento), nível de palavra ou dicionário (análise de palavras em frases), nível de aspecto
(análise de aspectos dentro de uma frase).
Atualmente, as aplicações de análise de sentimento são puramente comerciais. Produtores
de filmes, por exemplo, utilizam análise de sentimento para avaliar o feedback do público
sobre seus projetos recentes; empresas incluem essa tecnologia para avaliar como os
consumidores estão reagindo aos seus produtos. Futuramente, conforme essa tecnologia
ficar melhor, será possível ver aplicações a uma miríade de problemas.
MACHINE LEARNING
Algum dia o computador irá parar de ser uma máquina limitada e dependente de
intervenção humana para ser capaz de pensar e agir com inteligência?
Para Alan Turing, seria possível considerar que o computador tinha se tornado inteligente
quando ele e um homem passassem por uma bateria de perguntas, e o interrogador
humano não fosse capaz de distinguir quem teria sido o autor das respostas, se o homem
ou a máquina.
O termo "inteligência artificial" foi utilizado pela primeira vez em 1956 por John McCarthy,
um pesquisador americano que afirmou que a inteligência artificial se refere à ciência e à
engenharia de construir máquinas inteligentes. Outra definição seria que a inteligência
artificial é o campo da ciência da computação que lida com a simulação de comportamento
inteligente em computadores.
Subcampos da IA: processamento de linguagem natural, machine learning, robótica,
planejamento automatizado, redes neurais, sistemas cognitivos
Machine learning é um dos subcampos da IA; deep learning é um subcampo da machine
learning.
A inteligência artificial surgiu em meados da década de 1950. O aprendizado de máquina
começa a ser estudado no início da década de 1980. A década de 2010 foi marcada pelo
aprendizado profundo.
Em geral, a IA trata de programas que podem sentir, raciocinar, agir e se adaptar a fim de
imitar a inteligência humana por meio de diversas técnicas, incluindo o aprendizado de
máquina.
O aprendizado de máquina trata de algoritmos cujo desempenho melhora à medida que são
expostos a mais dados no decorrer do tempo.
E o aprendizado profundo é um subconjunto do aprendizado de máquina em que um
software é capaz de treinar a si mesmo para executar diversas tarefas por meio da
utilização de redes neurais para aprender algo a partir de uma quantidade massiva de
dados.
O Aprendizado de Máquina é a ciência e a arte de programar computadores para que eles
possam aprender com os dados, ou ainda, o campo de estudo que dá aos computadores a
capacidade de aprender sem ser explicitamente programado.
Dessa forma, é possível estabelecer um paralelo entre o aprendizado de máquina e
programação tradicional. Na programação tradicional, os dados são as entradas, as regras
foram pré-definidas por um programador, o computador executa as regras na sequência
determinada e é gerado o resultado, a saída. Já no aprendizado de máquina, entra-se com
os dados e com vários exemplos de resultados passados, e a máquina gera as regras
estatísticas na forma de um modelo matemático que é composto de diversas funções e
parâmetros e é capaz de identificar padrões a partir de exemplos.
Quanto mais exemplos de resultados são oferecidos, mais o algoritmo é treinado, mais
regras são aprendidas e mais ajustado se torna o modelo. Essa é a etapa do processo de
aprendizado de máquina chamada de Treinamento e é bastante custosa (em questão
econômica e de tempo), pois deve-se colocar quantidade massivas de dados para que os
resultados sejam cada vez mais refinados.
Em seguida, há a etapa de Inferência, que é menos custosa. Ocorre quando é utilizada uma
programação bem próxima à programação tradicional, mas são usadas regras aprendidas
na etapa anterior e novos dados para gerar resultados.
O cientista de dados será responsável pela etapa de treinamento a fim de gerar regras
aprendidas e assim possibilitar que outros softwares as utilizem. Esse treinamento é feito
com os resultados aprendidos como entrada e com novos dados para processar e gerar
novos resultados.
As regras geradas podem ser utilizadas por outros softwares com a programação clássica
para inferir resultados.
Ressalta-se que a inferência é probabilística e não determinística, ou seja, ela identificará
uma alta ou uma baixa probabilidade de ocorrer determinado resultado. Assim, o processo é
muito similar ao aprendizado humano, que é capaz de reconhecer elementos e identificá-los
depois que é treinado para isso.
O aprendizado de máquina é bastante relevante para os casos em que a criação de regras
seria inviável, extremamente custosa ou maçante.
» Tipos de aprendizado
Existem diferentes abordagens de algoritmos de aprendizado de máquina que podem ser
classificadas como:
~ Aprendizado Supervisionado
Trata-se de um conjunto de técnicas de aprendizado para treinar um modelo com dados
rotulados manualmente, isto é, um especialista/supervisor externo diz (previamente) qual é
a saída esperada para cada dado histórico utilizado no treinamento. São as técnicas mais
comumente empregadas no contexto de aprendizado de máquina e geralmente utilizadas
para identificar padrões específicos, prever resultados dado um conjunto de amostras de
treinamento.
A saída desejada para cada exemplo de entrada já é conhecida no aprendizado
supervisionado, isto é, os dados de saída são previamente rotulados. Essa abordagem
também é chamada de tarefa de previsão e é bastante semelhante à aprendizagem
humana sob a supervisão de um professor, pois este fornece bons exemplos para que o
aluno memorize, e o aluno então deriva as regras gerais desses exemplos específicos.
Nesse caso, o processo de aprendizagem de um algoritmo em relação ao conjunto de
dados de entrada é acompanhado por um supervisor ou professor que sabe quais são as
respostas certas, o algoritmo faz as predições sobre o conjunto de dados de entrada e ele
vai corrigindo a saída à medida que suas respostas não são de acordo com o resultado
esperado. Ex: teste de captcha.
➔ trata-se da abordagem mais comum de aprendizado de máquina
➔ existe um supervisor ou professor responsável por treinar o algoritmo
➔ o supervisor conhece de antemão os rótulos (categorias, classe, sinal, variável, alvo,
target, label, tag), assim o supervisor decide qual é o resultado esperado em cada
contexto, é ele quem escolhe o rótulo no aprendizado supervisionado e o utiliza para
treinar o algoritmo
Os problemas de aprendizado supervisionado geralmente tratam de uma variável
quantitativa ou qualitativa.
Se os rótulos se referem a um conjunto infinito de valores numéricos contínuos, a tarefa se
chama regressão (ex: > 100,00 ou < 100); se os rótulos se referem a um conjunto finito e
não ordenado de valores categóricos (não numéricos), a tarefa se chama classificação (ex:
alto ou baixo).
Os modelos supervisionados mais conhecidos são: árvores de decisão, regressão linear,
regressão logística, redes neurais, K-Nearest Neighbors (KNN), Support Vector Machines
(SVM).
~ Aprendizado Não-Supervisionado
Trata-se de um conjunto de técnicas para treinar um modelo em que não se sabe a saída
esperada para cada dado usado no treinamento, ou seja, não utiliza rótulos/categorias para
as amostras.
Os algoritmos são formulados de tal forma que podem encontrar estruturas e padrões
adequados por conta própria, sem a existência de um supervisor ou professor para rotular
os dados.
O algoritmo identifica as semelhanças nos dados apresentados e reage com base na
presença ou ausência dessas tais semelhanças. Essa abordagem, que também é chamada
de tarefa de descrição, permite que o algoritmo aprenda a categorizar dados
autonomamente. (Aprende por comportamento, de acordo com as estatísticas.) Agora a
ideia não é prever nada, mas sim organizar os dados de alguma forma ou descrever sua
estrutura.
Existem dois grandes subgrupos de aprendizado não-supervisionado: Agrupamentos
(Clustering) e Regras de Associação (Association Rules).
As regras de associação são um tipo de aprendizado não-supervisionado que permite
estabelecer regras capazes de verificar determinados elementos em um conjunto estão
intimamente associados, isto é, se a presença de um elemento implica a presença de outro
dentro em uma mesma transação. Os principais modelos são: Apriori e Principal
Component Analysis (PCA). Ex: arrumação de um supermercado
O agrupamento é um tipo de aprendizado não-supervisionado em que se busca encontrar
padrões em um conjunto de dados e agrupá-los em subconjuntos que, ao comparar dados
de um mesmo grupo, sejam o máximo possível homogêneos/semelhante e, ao comparar
dados de grupos diferentes, sejam o máximo possível heterogêneos/diferentes. Os
principais modelos são: k-Means e Agrupamento Hierárquico.
O aprendizado não-supervisionado pode retornar associações ou agrupamentos que não os
são desejados. Por isso, é necessário decidir o tipo de algoritmo que a solução precisa. O
aprendizado não-supervisionado é bem mais barato que o aprendizado supervisionado.
Cabe, de acordo com o resultado desejado e as variáveis do projeto, decidir qual técnica
que melhor se aplica. Ex: agrupamento de itens em uma loja on-line.
~ Aprendizado Semi-Supervisionado
Nesse caso, são utilizados dados rotulados e não-rotulados para o treinamento. Em geral,
utiliza-se uma pequena quantidade de dados rotulados e uma grande quantidade de dados
não-rotulados, visto que dados não-rotulados são mais baratos e obtidos com menos
esforço.
Pode ser aplicada para o agrupamento, regras de associação, classificação ou regressão.
~ Aprendizado por Reforço
Trata-se de um conjunto de técnicas que utilizam tentativa e erro para descobrir decisões
ótimas de como interagir com ambiente ou com outros agentes.
Sua meta é reforçar ou recompensar uma ação considerada positiva e punir uma ação
considerada negativa.
Ex: robôs aspiradores.
Em suma, algoritmos de aprendizado por reforço baseiam-se em reforço positivo/negativo
para otimização de resultado.
~> Classificação
Trata-se de uma técnica de aprendizado supervisionado para distribuir um conjunto de
dados de entrada em categorias ou classes pré-definidas de saída. O supervisor pode
escolher um conjunto de features (características, qualidades) que são os valores que
caracterizam de forma útil as coisas que desejamos classificar. E depois inserir dados de
treinamento para ir afinando o aprendizado. O trabalho dos algoritmos de aprendizado de
máquina é tentar maximizar as classificações corretas enquanto minimiza seus erros.
Para avaliar a qualidade de um modelo que mostra as frequências de classificação para
cada classificador/rótulo do modelo, utiliza-se uma tabela chamada de Matriz de Confusão
ou Erro. O eixo horizontal indica o valor previsto ou esperado; o vertical indica o valor real.
Recall pode ser utilizado em situações em que falsos-negativos são mais prejudiciais que os
falsos-positivos. Ex: classificar uma pessoa como vacinado ou não-vacinado.
Precisão pode ser utilizada em situações em que falsos-positivos são mais prejudiciais que
falsos-negativos. Ex: classificar ações na bolsa de valores como boas ou ruins.
~> Árvore de decisão
É uma das principais ferramentas de classificação. Consiste basicamente em uma
representação gráfica de regras de classificação. Conseguem demonstrar visualmente as
condições para categorizar dados por meio de uma estrutura que contém nó raiz, nós folha
e nós finais.
É possível atravessar a árvore de decisão partindo do nó raiz até cada folha por meio de
diversas regras de decisão e o nó final contém sempre uma das classes pré-definidas.
É importante destacar também que uma árvore de decisão pode ser utilizada tanto para
classificação (classes categóricas e finitas) quanto para regressão (classes infinitas e
numéricas).
Cada nó interno denota um teste de um atributo, cada ramificação denota o resultado de um
teste e cada nó folha apresenta um rótulo de uma classe definida de antemão por um
supervisor. O objetivo dessa técnica é criar uma árvore que verifica cada um dos testes até
chegar a uma folha, que representa a categoria, classe ou rótulo do item avaliado.
A árvore de decisão, por si só, não tem a ver com aprendizado de máquina, mas o seu
processo de construção automático e recursivo, a partir de um conjunto de dados, pode ser
considerado um algoritmo de aprendizado de máquina.
O processo de construção do modelo de uma árvore de decisão se chama indução e busca
fazer diversas divisões ou particionamentos dos dados em subconjuntos de forma
automática, de modo que os subconjuntos (nós finais) sejam cada vez mais homogêneos
(mais bem classificados, o máximo de acurácia possível).
O algoritmo da árvore de decisão analisará, em cada nó, várias variáveis precisamente
colocadas e aprenderá, aos poucos, as suas relevâncias, assumindo uma decisão para
cada uma dessas variáveis (e seus possíveis pontos de corte) a fim de descobrir quais são
as melhores para realizar o particionamento dos dados de modo que se formem dois
subgrupos mais homogêneos possíveis. Ex: um software de análise de concessão de cartão
de crédito.
O algoritmo vai fazer milhares de testes com cada uma das variáveis, vai testar diversos
pontos de corte diferentes e diversas sequências de análise de variáveis diferentes. O que
importa é que se sairá de um grupo muito misturado (menos homogêneo) para dois
subgrupos menos misturados (mais homogêneos) - a isso denomina-se Ganho de
Informação ou Redução de Entropia. (Entropia é a medida que informa o quanto um
conjunto de dados está desorganizado ou misturado.)
Os subgrupos serão mais puros à medida que seus dados forem mais homogêneos.
Métricas para calcular a pureza de um subgrupo: Índice de Gini, Redução de Variância.
Para encontrar modelos cada vez mais puros, ocorrem as divisões nos nós, mas esse
processo precisa ser finito para evitar o overfitting (um único dado para cada nó folha). Há
diversas maneiras de definir um limite para as divisões: é possível definir uma
altura/profundidade máxima da árvore e, quando esse limite for atingido, interrompe-se as
subdivisões ou realiza-se a poda da árvore (que consiste em deixar a árvore crescer quanto
quiser e depois reduzir as divisões que sejam pouco significativas).
Vantagens de árvores de decisão:
➔ podem gerar regras compreensíveis e executam a classificação sem exigir muitos
cálculos, sendo capazes de lidar com variáveis contínuas e categóricas
➔ fornecem uma indicação clara de quais campos são mais importantes para predição
ou classificação
Desvantagens de árvores de decisão:
➔ são menos apropriadas para tarefas de estimativa em que o objetivo é prever o valor
de um atributo contínuo
➔ estão sujeitas a erros em problemas de classificação com muitas classes e um
número relativamente pequeno de exemplos de treinamento
➔ são bastante propensas ao overfitting dos dados de treinamento
➔ uma única árvore de decisão normalmente não faz grandes previsões, portanto
várias árvores são frequentemente combinadas em forma de florestas chamadas
Random Forests
➔ a árvore de decisão fornecerá resultados promissores somente se as informações
forem precisas e exatas; mesmo se houver uma pequena alteração nos dados de
entrada, isso pode causar grandes alterações na árvore
➔ se o conjunto de dados é enorme, com muitas colunas e linhas, é uma tarefa muito
complexa projetar uma árvore de decisão com muitos ramos
➔ se uma das regras do modelo estiver incorreta, isso gerará divisões equivocadas da
árvore, fazendo com que o erro se propague por todo o resto da árvore
~> Modelos lineares
Uma das principais aplicações de aprendizado de máquina é a previsão. Ela consiste na
tentativa de previsão de algum tributo usando somente alguns dados de entrada. Ela é
determinada com base em exemplos históricos de dados de entrada e saída, ou seja, com a
análise (estatística) de comportamentos passados conseguimos fazer inferências sobre o
futuro.
Nesse tipo de técnica são usados modelos preditivos responsáveis por relacionar dados de
entrada (variáveis independentes) com o resultado esperado (variável dependente ou viável
alvo contínua).
Diferentes modelos geram formas matematicamente muito diferentes de construir a relação
entre as variáveis de entrada e de saída, tornando-os capazes de captar padrões
estatísticos também diferentes. Dessa forma, deve-se testar diferentes conjunturas até
achar a mais adequada para a situação.
Modelos preditivos, então, são basicamente uma função matemática que, quando aplicada
a uma massa de dados, é capaz de identificar padrões e oferecer uma previsão do que
pode ocorrer.
Existem vários tipos de modelos de predição, dentre eles se destacam os modelos linares.
Esses modelos compreendem uma ampla família de modelos derivados da estatística,
embora apenas dois deles (regressão linear e regressão logística) sejam frequentemente
utilizados.
● Regressão Linear: é a ferramenta estatística que nos ajuda a quantificar a relação
entre uma variável específica e um resultado que nos interessa enquanto
controlamos outros fatores. Nela, é possível isolar o efeito de uma variável enquanto
são mantidos os efeitos das outras variáveis constantes. Em essência, a regressão
linear buscar encontrar o "melhor encaixe" para uma relação linear entre duas
variáveis.
Utiliza uma metodologia chamada de Mínimos dos Quadrados Ordinários (MQO)
que nos dão a melhor descrição de uma relação linear entre duas variáveis. O
resultado é uma regressão linear simples (y = α + βx ~ α é o intercepto, ponto em
que a reta intercepta o eixo y, valor de y quando x = 0; β é a inclinação da reta).
MQO encaixa a reta que minimiza a soma dos residuais elevados ao quadrado.
Cada observação nos dados tem um residual, que é a distância vertical a partir da
reta de regressão, exceto para aquelas observações que se situam diretamente em
cima da reta, para as quais o residual vale zero. Quanto maior a soma geral dos
residuais, pior é o encaixe da reta.
A fórmula pega o quadrado de cada residual antes de somar todos e isso aumenta o
peso dado àquelas observações mais distantes da reta de regressão (extremos ou
outliers). Dessa forma, os mínimos quadrados ordinários "encaixam" a reta que
minimiza a soma dos residuais ao quadrado. (O algoritmo estará cada vez mais
ajustado quando a soma dos residuais for cada vez menor, quando a reta estiver
mais próxima dos elementos centrais.)
A ferramenta de regressão linear é eficaz, mas possui suas limitações. Ela permite
trabalhar apenas com dados quantitativos (contínuos) e não com dados qualitativos
(categóricos).
● Regressão Logística: é um algoritmo de aprendizagem de máquina supervisionado
utilizado para classificação. Trabalha com dados qualitativos (categóricos).
Em geral, a utilização da regressão logística se dá com categorias binários, isto é,
aquelas que podem assumir somente dois valores (ex: grande ou pequeno, alto ou
baixo, sim ou não, lucro ou prejuízo, válido ou inválido).
As informações de entrada são chamadas de variáveis independentes. Em seguida,
é aplicado um coeficiente ou peso a cada uma dessas variáveis que comporão uma
função de regressão linear múltipla e retornará um determinado valor como resposta
(variável dependente).
Regressão Logística é um tipo de algoritmo de classificação, então é necessário
transformar o valor real retornado pela regressão linear em uma das categorias
pré-definidas por um supervisor. Para tal, iremos utilizar um modelo logístico
(chamado logit) para fazer um mapeamento desse valor dentro de um intervalo entre
[0, 1], que pode ser interpretado como a probabilidade de ser da categoria que nos
interessa.
A função de ativação que recebe como entrada um número real [-∞, +∞] retornado
por uma função de regressão linear e sempre retorna um número entre [0, 1] é
chamada de Função Sigmóide. Trata-se de uma função estritamente crescente que
varia [-∞, +∞] horizontalmente e [0, 1] verticalmente. Por conta de seu formato, pode
ser chamada de Função em S.
O conjunto de n entradas (e1, e2, e3, …, en) são multiplicadas por pesos específicos
associados a cada entrada (p1, p2, p3, …, pn). Cada um desses pesos é livremente
ajustável de forma independente dos demais. Em seguida, é realizada a soma de cada
entrada multiplicada por seu respectivo peso associado. E o próximo passo é somar tudo
isso com uma entrada especial denominada viés ou bias (b).
O peso de uma entrada representa seu grau de força ou influência no resultado - quanto
maior o peso de uma determinada entrada, maior será a influência no resultado; e o viés
(bias) é um valor que pode ser ajustado para aumentar ou diminuir a força do sinal ao
adicionar um valor positivo/negativo com o intuito de regular o formato/curvatura da função
ajustá-la ao propósito desejado.
A lógica básica de um perceptron na parte inicial é parecida com uma regressão linear, mas
na etapa seguida, passa o resultado da regressão linear por uma função de ativação,
responsável por fazer uma transformação não-linear do resultado da etapa anterior e definir
se um nó será ativado ou não.
Funções lineares (ex: regressão linear) são aquelas que podem ser representadas em um
plano cartesiano como uma reta. O objetivo da função de ativação é transformar o formato
de reta em um formato não linear, tornando a função mais flexível/adaptável para tarefas
complexas e permitir que pequenas alterações na entrada de dados não causem grandes
alterações na saída de dados.
Existem duas grandes classes de funções de ativação: funções de limite e funções
sigmóides. Os perceptrons originais utilizavam funções de limite. Nesse caso, se o resultado
da função de ativação fosse maior ou igual a um determinado limite (em inglês, threshold),
então essa função retornaria 1 (nó ativado); se o resultado da função de ativação fosse
menor que um determinado limite, então essa função retornaria 0 (nó não-ativado).
Existem outras variações, mas funções desse tipo sempre têm formato de um degrau (em
inglês, step).
Há também o caso em que se deseja que o resultado assuma valores entre [-1, 1]. Para tal,
é possível utilizar um outro tipo de função sigmóide chamada de tangente hiperbólica:
» Redução de dimensionalidade
Trata-se da representação de um dataset por um conjunto de features de dimensionalidade
menor que o conjunto de features original com o intuito de reduzir os efeitos da maldição da
dimensionalidade.
FLUÊNCIA DE DADOS
Fluência de dados é um termo usado para descrever a capacidade de uma organização de
reunir, interpretar e utilizar grandes conjuntos de dados para tomar decisões de negócios
mais informados. Trata-se da capacidade de gerar e comunicar insights úteis a partir de
dados e usar esses insights para informar o planejamento estratégico de uma organização,
criar modelos de previsão, identificar tendências e tomar decisões.
Em um contexto de negócios, a fluência de dados conecta os funcionários em todas as
funções por meio de um conjunto de padrões, processos, ferramentas e termos, rejeitando a
ideia de que poucos são guardiões de informações. Em vez disso, todos espalham
conhecimento, ampliam o acesso a dados em uma organização e, como resultado,
melhoram a tomada de decisões geral.
Regularmente, Jordan Morrow utiliza o termo fluência de dados de forma intercambiável
com alfabetização de dados, mas para ele a alfabetização de dados é a capacidade de ler,
trabalhar, analisar e se comunicar com dados, enquanto que a fluência de dados é a
capacidade de falar e entender a linguagem dos dados. Logo, a fluência de dados
desempenha um papel direto na última parte da definição de alfabetização de dados: a
comunicação com dados.
Para alguns autores, esses conceitos são sinônimos; para outros, a fluência em dados está
dentro da alfabetização de dados, sendo o primeiro conceito (fluência) referente
basicamente a poder falar e entender a linguagem dos dados, e o segundo mais
abrangente, permite analisar e se comunicar com dados.
O poder da fluência de dados está no fluxo livre de informações: de cientistas de dados
para analistas de dados para tomadores de decisões para a equipe de executivos para a
força de trabalho. Esse livre fluxo de informações é importante para o sucesso
organizacional e deve-se utilizar essa capacidade de falar o mesmo idioma para ajudar a
impulsionar o sucesso analítico dos dados.
A alfabetização de dados tem oito pilares fundamentais:
Importância e aplicações
A fluência em dados impulsiona a tomada de decisões e, quando a cultura de uma empresa
promove a acessibilidade, interpretação e relevância de seus dados, as equipes tomam
decisões com confiança e rapidez, definindo melhores KPIs (Key Performance Indicators)
para acompanhar os resultados e promovendo a curiosidade dentro da organização,
instigando a sempre descobrir o que está por trás dos dados. Dessa forma, uma
organização se torna capaz de cultivar a cultura de aprendizagem e também de
transparência, e as partes interessadas (stakeholders) poderão tomar decisões informadas,
medi-las e iterá-las, melhorando a produtividade e diversos outros aspectos.
A formação individual exige programas que atendam a diferentes funções e departamentos,
incluindo as lideranças, ou seja, as empresas que são capazes de preparar programas de
dados completos e iniciar mudanças nos níveis mais altos estarão mais bem posicionadas
futuramente.
Principais aplicações:
Níveis de proficiência
Para uma organização se tornar fluente em dados, deve inicialmente avaliar o estado atual,
que inclui a infraestrutura de dados existente na organização e o nível de competência para
lidar com dados em todas as unidades de negócios, o que ajuda a identificar uma linha de
base (baseline) de proficiência dos funcionários em relação aos dados. Também é
importante estar ciente de seus objetivos estratégicos no que se refere tanto à análise de
dados quanto à fluência de dados, com avaliações dentro do contexto dos objetivos gerais
de negócios.
Logo, é de extrema importância abordar questões-chave durante o período de avaliação do
estado atual, como: "quem são os principais atores e quem pode atuar como
administradores e proprietários de dados? Eles podem identificar e comunicar as lacunas
em seus conjuntos de dados? Quais dados estão disponíveis e quais são as estruturas de
dados existentes? Quais segmentos de negócios têm recursos de dados fracos? Como é o
ecossistema de dados do estado de destino? Como a fluência de dados se encaixa nas
metas e objetivos estratégicos mais amplos da empresa?".
O segundo passo é treinamento de funcionários. O aprimoramento da qualificação é uma
maneira de aumentar gradualmente a fluência de dados de uma organização, o que pode
resolver uma variedade de problemas e responder até mesmo a perguntas altamente
especializadas.
Em todo caso, o nível de proficiência em fluência de dados de uma organização pode variar
bastante baseado em sua capacidade tecnológica de gerar enormes quantidades de dados
e o nível de conhecimento analítico de seus funcionários.
Há quatro níveis de proficiência:
Framework
É uma série de ações e estratégias que visam solucionar um problema bem específico.
Assim, quando se deparam com esse cenário, os profissionais recorrem a um conjunto
pronto de abordagens e otimizam os seus resultados.
A fluência de dados é a habilidade de utilizar a linguagem dos dados para trocar e explorar
ideias que são importantes para uma organização de forma fluída.
O conceito é válido tanto para as organizações quanto para indivíduos. Todos precisam de
habilidades para ler, escrever, ouvir e falar utilizando a linguagem dos dados.
Para criar uma cultura de fluência de dados, os líderes devem estabelecer as principais
métricas organizacionais que orientam os esforços individuais e da organização, sem as
quais os funcionários não têm como saber se estão no caminho correto para atingir as
metas desejadas.
As métricas podem servir a dois propósitos: identificar problemas e medir o desempenho.
Quando o objetivo é identificar problemas e apontar áreas de ineficiência operacional,
definir a métrica certa requer um pouco de trabalho, dado que necessita que se determine
quais evidências podem ser encontradas e como exatamente elas aparecem. Já quando o
objetivo é medir o desempenho, as métricas de sucesso certas se concentram em medidas
que podem ser controladas e onde a melhoria na métrica é uma coisa inequivocamente
boa.
Após ter clareza sobre a finalidade para a qual determinada métrica será usada, o próximo
passo é escolher uma boa métrica.
Dados são fatos ou estatísticas coletadas para servirem de referência ou análise; não têm
significado ou semântica quando vistos isoladamente; são brutos, simples e desvinculados
de contexto/realidade.
A informação é a ordenação e organização dos dados de forma que passa a transmitir uma
mensagem compreensiva dentro de um determinado contexto. O ciclo de vida da
informação não tem uma classificação unificada, mas uma possível classificação
compreende as fases de: produção, manuseio, armazenamento, transporte e descarte.
Considerando sua autenticidade, confidencialidade, integridade e disponibilidade.
O conhecimento acontece quando a informação é aplicada. Tipos de conhecimento: tácito
(está armazenado nas pessoas e foi adquirido ao longo da vida - subjetivo, cognitivo e
experimental; pessoal e internalizado; difícil de capturar, documentar e compartilhar;
proveniente da experiência (expert); conhecimento empírico) e explícito (ou codificado é
aquele disponibilizado por meio de algum código e pode ser transmitido através de um meio
físico - objetivo, racional e técnico; estruturado e externalizado; fácil de capturar,
documentar e compartilhar; proveniente da racionalidade; conhecimento sequencial).
Formas de transmissão do conhecimento: socialização (compartilhamento do conhecimento
através da troca de ideias e do compartilhamento de experiências, por meio de observação
ou/e prática), externalização (o conhecimento pessoal passa para o domínio público por
meio de uma documentação que pode ser utilizado por um terceiro e, por isso, deve ser
classificado), internalização (adquirido a partir de leitura ou aprendizado próprio),
combinação (o conhecimento explícito de diferentes fontes são agrupados ou misturados
visando agregar valor para gerar um novo conhecimento).
A inteligência (ou sabedoria) é quando a pessoa utiliza seu conhecimento para algum
propósito. Envolve a capacidade de julgamento (certo/errado, bom/ruim), isto é, usar o
conhecimento para tomar a melhor decisão ou aplicá-lo a alguma situação concreta. É uma
habilidade essencialmente humana e difícil de ser obtida por meio de máquinas.
GOVERNANÇA DE DADOS
É o exercício de tomada de decisão e autoridade para as questões relacionadas a dados.
Em suma, a governança de dados é responsável por gerir os princípios de organização e
controle de dados e informações. Esta gestão envolve interface com diversas outras
funções e estabelece políticas e diretrizes corporativas para governar os dados, além de
atribuir papéis e responsabilidades.
A função de governança de dados orienta todas as outras funções de gerenciamento de
dados. O objetivo geral do gerenciamento de dados é garantir que uma organização
obtenha valor de seus dados. A governança de dados se concentra em como as decisões
são tomadas sobre os dados e como se espera que pessoas/processos se comportem em
relação a eles.
O escopo e o foco de um determinado programa de governança de dados dependerão das
necessidades organizacionais, mas a maioria dos programas inclui:
Para atingir esses objetivos, um programa de governança de dados desenvolverá políticas e
procedimentos, cultivará práticas de administração de dados em vários níveis dentro da
organização e se envolverá em esforços de gerenciamento de mudança organizacional que
comuniquem ativamente à organização os benefícios de uma melhor governança de dados
e os comportamentos necessários para gerenciar com sucesso os dados como um ativo
durante o ciclo de vida dos dados apresentados na imagem abaixo.
Para a maioria das organizações, adotar a governança de dados formal requer o apoio do
gerenciamento de mudanças organizacionais, bem como o patrocínio de um executivo
como Diretor de Risco, Diretor Financeiro ou Diretor de Dados que poderão atuar como
Curadores de Dados (Data Steward): papel fundamental para as atividades operacionais de
governança.
As organizações se esforçam cada vez mais para se tornarem orientadas por dados,
considerando proativamente os requisitos de dados como parte do desenvolvimento de
estratégias, planejamento de programas e implementação de tecnologia, mas isso envolve
desafios culturais significativos e exige mudanças culturais apoiados por uma liderança
forte. Para se beneficiar dos dados como um ativo corporativo, a cultura organizacional
deve aprender a valorizar os dados e as atividades de gerenciamento de dados.
Para muitas organizações, a mudança cultural é um grande desafio e, por isso, um dos
princípios fundamentais da gestão de mudanças é que a mudança organizacional requer
mudança individual. Quando a governança e o gerenciamento de dados exigem mudanças
comportamentais significativas, o gerenciamento formal de mudanças é necessário para o
sucesso e, nesses casos, o direcionador ou incentivador (driver) mais comum para a
implantação é a conformidade regulatória, especialmente para setores fortemente
regulamentados, como serviços financeiros e serviços de saúde.
Além da conformidade e da análise, outras necessidades de negócios também estimulam a
implantação da governança de dados, como: outras necessidades de negócios, problemas
de dados importantes, redução de riscos, melhoria de processos.
Os profissionais de governança de dados definem regras para gerenciar ativos de dados.
Um programa de governança de dados deve levar em consideração questões
organizacionais e culturais distintas e os desafios e oportunidades específicos de
gerenciamento de dados dentro da organização.
A governança de dados é separada da governança de tecnologia da informação que toma
decisões sobre investimentos em tecnologia da informação, portfólio de aplicativos de
tecnologia da informação e portfólio de projetos de tecnologia da informação - em outras
palavras: hardware, software e arquitetura técnica geral. Em contraste, a governança de
dados se concentra exclusivamente no gerenciamento de ativos de dados e de dados como
um ativo.
O objetivo da governança de dados é permitir que uma organização gerencie os dados
como um ativo fornecendo os princípios, políticos, processos, frameworks, métricas e
supervisão para gerenciar os dados como um ativo e orientar as atividades de
gerenciamento de dados em todos os níveis. Para atingir esse objetivo geral, um programa
de governança de dados deve ser:
Já Bergson Rêgo afirma que governança de dados é uma gestão estratégica de dados
definida e aplicada nos altos níveis da empresa pelos executivos, ou seja, a tomada de
decisões a respeito de gestão de dados é feita pela alta administração. E requer patrocínio
constante em todo o programa. É um governo (pode ter subdivisão legislativa, executiva e
judiciária) e é um programa (não pode simplesmente ser adotada através de um projeto).
A governança de dados garante que os dados sejam gerenciados adequadamente sem
executar diretamente o gerenciamento de dados. Representa uma separação inerente de
deveres entre supervisão e execução.