O que é Risco? O que é Desvio Padrão? E porque isso importa para a sua carreira, e sua vida?

Christian Zambra
productmanagerslife
10 min readOct 8, 2023

Eu comecei minha carreira trabalhando com Estratégia no mercado financeiro, migrei para Produtos e hoje trabalho com Produtos de Inteligência Artificial. E um dos conceitos que me acompanharam em todas as fases é o de Risco.

Muito antes disso, na infância humilde, nos estudos lá na Bela Vista, na querida Escola Municipal de Primeiro Grau Celso Leite Ribeiro Filho, acho que lá aprendi os princípios do conceito de risco. Não, não é só o risco da bala perdida, é também o risco de não “ser alguém na vida”.

Todas as nossas decisões envolvem risco. Uma decisão é tomada no presente, esperando um resultado futuro. Esse resultado futuro é incerto, e sim, ele possui risco. Por isso gostaria de compartilhar aqui um pouco do que aprendi a respeito desse conceito tão útil. Espero que gostem, conto com o feedback de todos :)

Mas afinal, o que é Risco?

Risco diz respeito a quando as coisas não acontecem como esperávamos.

Esse conceito é bem difícil de entender, mas extremamente importante para Estratégia, Desenvolvimento de Produtos de Inteligência Artificial, e mesmo Mercado Financeiro.

Em estratégia, sempre alocamos esforços para atingir um determinado objetivo. E em geral, nosso cérebro pensa no ganho potencial. Mas não no risco. Risco nos dá medo. E não gostamos de sentir medo. O medo nos leva para estados irracionais. Não gostamos disso. Mas cada cenário que planejamos, implica em um risco. E se conseguirmos olhar para eles de forma mais racional, mesmo com medo, podemos tomar as melhores decisões.

Em Produtos, especialmente Inovação, lidamos com Risco todo dia. Falando de Inteligencia Artificial, a todo momento temos o risco dos nossos modelos fazerem previsões erradas. E essas previsões podem suportar decisões erradas. Podemos fazer todo o planejamento estratégico de uma solução pensando que o modelo vai convergir e prever perfeitamente, mas sempre existe o risco disso não acontecer.

Produtos são como investimentos, investimos tempo e recursos para que algo gere valor, traga resultados. E no mercado financeiro investimos dinheiro em um ativo esperando que ele traga lucro, esperando em geral vender por um valor maior do que compramos. E aqui vemos um padrão muito simples mas que ilustra bem pontos relevantes. Se uma ação está subindo, a tendência é de que ela… continue a subir. Essa é a forma mais simplificada de pensar. Porém, existe o risco. Ela está subindo ou descendo de forma consistente?mais especificamente: Qual o risco do cenário perfeito que coloquei na minha mente, de comprar barato, vender caro e lucrar com isso?

O que é Desvio Padrão e qual a sua relação com Risco?

Vamos começar pela base do Desvio Padrão, a Média.
Supondo que você vá comprar Sal, ou vá comprar ações da Bovespa. Você precisa saber o preço.
Pode ser que na média, o quilo do Sal custe R$ 4,00. Então se você vai com R$5,00, espera poder comprar o sal.
da mesma forma, vamos supor que você queria comprar uma cota de um fundo atrelado ao iBovespa (ETF). Pode ser que na média, uma cota desse fundo custe R$100,00, então com R$100,00 você espera poder comprar.
E existe um risco dessa esperança não se tornar realidade. Os valores dados acima são médias.
Imagine que apesar do valor médio do Sal ser de R$4,00, ele oscila muito. Quase nunca está em R$4,00. Imagine a seguinte cotação de Sal:

Dia 1: R$2,00
Dia 2: R$6,00
Dia 3: R$3,00
Dia 4: R$5,00

Considerando esses 4 dias, qual a chance de vc comprar Sal pelo preço médio? ZERO. Nenhum dia estava a R$4,00. Frustração total. Em metade dos dias (1 e 3) vc poderia comprar abaixo da média, e na outra metade (2 e 4) vc poderia comprar acima. Arriscado né?
Então, é disso que estamos falando, de risco.

E o Desvio Padrão diz respeito exatamente a isso. É uma medida estatística que nos dá a distancia que os dados reais estão da média. DNo caso do Sal, considerando a fórmula de Desvio Padrão da Amostra (a mesma que o Pandas usa, e que usaremos em nosso exemplo em Python) o desvio é de 1.82.

Esse desvio é calculado como abaixo: Pegamos cada uma das medidas (2,6,3,5) e subtraimos delas as médias (4). Cada um dos resultados, elevamos ao quadrado, dividimos por (n-1) o número de medidas, e temos o valor. O importante é entender como esse valor varia conforme a incerteza/risco da amostra.

Calculo do Desvio Padrão

Se os preços fossem mais próximos da média, por exemplo (3,5,3,5) o desvio seria menor, de 1.15.

E se os preços fossem todos iguais às médias (4,4,4,4), o desvio seria Zero.

No cenário 1, com desvio de 1,82, o Risco de comprar Sal por um valor muito diferente do planejado era alto.
No cenário 2, com desvio de 1,15, o Risco era menor. E realmente, ou compraria por 3 ou por 5, valores mais próximos da média.
E no cenário 3, com desvio de 0, o Risco era zero. Compraria pelo valor previsto.

(A título de exemplo, um código simples em Python pra calcular os desvios citados acima, pra já irmos “aquecendo”).

import pandas as pd
datax = [2,6,3,5]
dfx = pd.DataFrame(datax, columns=['Numbers'])
x = dfx['Numbers'].std()
print(x)

datax = [3,5,3,5]
dfx = pd.DataFrame(datax, columns=['Numbers'])
x = dfx['Numbers'].std()
print(x)

datax = [4,4,4,4]
dfx = pd.DataFrame(datax, columns=['Numbers'])
x = dfx['Numbers'].std()
print(x)

O que isso tem a ver com o papel de um AI Product Manager?

Grande parte dos sistemas de AI utilizam, como função final ou como parte do processo, previsões. Na maioria das vezes as previsões são feitas através de redes neurais. Essas previsões direcionam ações. E, no final das contas, o sucesso do produto tem a ver com o uso dessas previsões.
É extremamente importante para o AI Product Manager saber se o produto dele está gerando previsões corretas. É importante tentar buscar o porque das previsões estarem corretas ou não. E seria incrível ter, antes de construir uma plataforma enorme, uma idéia da dificuldade e do risco dessa plataforma dar certo.
Falando a verdade, muitas vezes calcular esse risco completamente é tão caro que vale a pena fazer um modelo pequeno, testar e ver no que dá. Mas tendo pelo menos idéia dos conceitos de risco e dos conceitos estatísticos que indicam pra gente se algo é arriscado ou não, ajuda muito!

Interessante o exemplo do Sal, mas vamos pra algo mais real? Que tal o iBovespa?

Chegou a hora de por a mão na massa.

Imagine que você é um AI Product Manager e criou um produto para prever o valor do iBovespa. E (inspirado no meu passado do mercado financeiro) imagine que você também é o cliente desse produto! Você precisa suportar a tomada de decisão de comprar ou vender, de investir ou não nesse índice. Ah, e (inspirado no meu passado do mercado financeiro também) como tem pouca gente no escritório você também é o programador :D Mas ao invés das antigas planilhas Excel cheias de macros e programação VBA, bora de Python?

Vamos começar pelo começo, você precisa instalar o Python. Se for mais das antigas, pode instalar no seu computador. Sugiro instalar o pacote Anaconda e rodar isso daqui no Jupyter. Mas se quiser uma dica mais prática que acabei de aprender, e se vc tiver uma conta no Google, usa o Google Colaboratory. Só clicar no link, logar, ir em “Arquivo”, “Novo Notebook” e começar a codar.

A primeira coisa a se fazer é importar as bibliotecas. E aqui uma dica: Pode ser que nem todas as bibliotecas estejam instaladas na sua máquina ou no colab. Se der erro, é só instalar. Clica no link que tá comentado no código (pypi) e segue as instruções (em geral é só rodar o comando pip install nome_da_biblioteca).

Aqui segue o comando para importar as bibliotecas:

#Os comandos abaixo importam as bibliotecas que serão utilizadas aqui.
#caso algum comando falhe pela biblioteca não ter sido instalada, click no link pypi e instale.


#NumPy - Biblioteca científica, muito útil para calculos mais complexos
# https://numpy.org/
#https://pypi.org/project/numpy/
import numpy as np

#Pandas - Biblioteca extremamente útil para a manipulação de tabelas e bases de dados
#https://pandas.pydata.org/
#https://pypi.org/project/pandas/
import pandas as pd

#MatPlotLib - Ferramenta de visualização de dados em python
#https://matplotlib.org/
import matplotlib.pyplot as plt

#Yahoo Finance - Uma das ferramentas mais simples e acessíveis, para acesso a contações de ativos negociados em bolsa de valores
#https://pypi.org/project/yfinance/
import yfinance as yf

Em seguida, vamos definir as principais variáveis que utilizaremos nesse exemplo:

  • Data inicial da análise: Escolhi o dia 01 de Setembro de 2022.
  • Data final da análise: Escolhi o dia 01 de Setembro de 2023, 1 ano depois.
  • Índice analisado: Ibovespa (no código eu explico como pegar o nome do índice certinho).
#Estes comandos indicam as principais variáveis a serem utilizadas

#Aqui definimos a data inicial do índice ou ação que queremos analisar
#Note que a data deve estar no formato Ano-Mes-Dia, com casas decimais da forma xxxx-xx-xx
data_de_inicio = '2022-09-01'

#Aqui definimos a dafa final do índice ou ação que queremos analisar
data_final = '2023-09-01'

#Aqui definimos qual indice ou ativo gostariamos de analisar.
#Para saber o código do ativo, entrei na página do yahoo finance e busquei o indice. O código se encontra entre paranteses, ao lado do índice.
#https://br.financas.yahoo.com/quote/%5EBVSP?p=%5EBVSP
nome_do_indice_ou_acao = '^BVSP'

Agora, nos comandos abaixo, vamos acessar o sistema Yahoo Finanças, pegar os dados históricos de cotação dos indices, e converter em um arquivo de dados Pandas.


#Este comando usa a biblioteca Yahoo Finance para criar uma base de dados com os valores da ação ou índice definidas anteriormente, no período definido.
# O comando 'close' ao final indica que vamos buscar somente os preços de fechamento
data = yf.download(nome_do_indice_ou_acao, start=data_de_inicio, end=data_final)['Close']
#Este comando nos mostra os dados que foram carregados no arquivo
data.head()
#Este comando converte os dados importados do Yahoo em um DataFrame Pandas, uma tabela que poderá utilizar diversas funções do pandas, como veremos a seguir
data_pd = pd.DataFrame(data)

E agora vamos transformar esses dados, para facilitar os cálculos matemáticos. Não vou entrar muito no detalhe, mas datas são variáveis discretas. Para utilizá-las nos calculos seguintes, precisamos transformá-las em contínuas. Para isso, vou considerar que um dia vem após o outro, e o intervalo entre eles é igual, independente do que aconteceu, se foi feriado, se não houve negociação. Assim, a primeira data será o dia 1, a segunda o dia 2 e assim por diante.

#Este comando cria uma série de números para representar as datas. Esses números serão necessários para podermos fazer uma regressão
# A título de curiosidade: Estatisticamente, essa conversão diz que a variável é contínua. Um dia após o outro.
time = np.arange(1,len(data_pd)+1)

#Este comando pega os numeros criados e inclui no arquivo
data_pd['time']=time

#este seleciona somente a nova coluna de tempo e os valores de fechamento
data_pd = data_pd[['time','Close']]

#este arredonda todos os números para 2 casas decimais
data_pd = round(data_pd,2)
data_pd.tail()

E aqui vem a parte que se assemelha a um produto de Inteligência Artificial. Para simplificar a compreensão, e como o tema é Risco, não vou usar redes neurais, vamos utilizar uma regressão simples, feita com base no método dos mínimos quadrados, mas não se fixe a isso. O importante é que é uma regressão. E regressão representa uma tendência. A tendência, basicamente, nos diz o que esperamos que aconteça no futuro a partir do que está acontecendo hoje. A regressão é nossa previsão do futuro, baseado nessa tendência observada.


# Este comando faz uma regressão. Seria algo como buscar o comportamento médio da amostra, para saber qual a tendência e assim ter idéia dos valores futuros.
# Neste caso específico, fazemos a regressão utilizando um método do Numpy, que usa mínimos quadrados.
#Em casos mais complexos, a previsão pode ser feita utilizando redes neurais e inteligência artificial.

reg = np.polyfit(data_pd['time'], data_pd['Close'], deg = 1)

E, finalmente, vamos para o primeiro gráfico. Observe a linha vermelha. Ela nos dá uma clara tendência de alta. Porém, veja a variação do Desvio Padrão. Tem bastante risco aí. Apesar da tendência de alta, se você comprasse lá pelo dia 25 (fechamento 117.561)e vendesse lá pelo dia 125 (fechamento 103.866) , provavelmente perderia dinheiro.

Ou seja, apesar de parecer que tá subindo, como o risco é alto, você poderia sim perder dinheiro.

#Aqui definimos a partir de qual dia a linha de tendencia/regressao sera calculada
periodo=--1

#Aqui calculamos a linha de tendência/regressão do ativo pelo periodo
trend = np.polyval(reg, data_pd['time'][periodo:])

#Aqui calculamos o desvio padrão
std = data_pd['Close'][periodo:].std()

#Aqui definimos as dimensões do gráfico a ser plotado
plt.figure(figsize = (10,6))

#Aqui plotamos o grafico
plt.plot(data_pd['time'], data_pd['Close'], label = nome_do_indice_ou_acao)

#Aqui plotamos a linha de tendencia/regressao, em vermelho
plt.plot(data_pd['time'][periodo:],trend, 'r--')

#Aqui plotamos a linha do desvio padrão em relação à linha de tendência
plt.plot(data_pd['time'][periodo:],trend-std, 'g--')
plt.plot(data_pd['time'][periodo:],trend+std, 'g--')
Gráfico iBovespa + Tendência + Desvio Padrão.

Mas esse intervalo parece ter “fases diferentes” né? Um período mais de alta, um mais de baixa… Vamos investigar um pouco mais? E se a gente recortasse o intervalo?

#Aqui pegamos o mesmo gráfico, calculando tendencia/regressao e Desvio em intervalos distintos

ini_01 = 1
fim_01 = 100
ini_02 = fim_01+1
fim_02 = 200
ini_03 = fim_02+1
fim_03 = 250


plt.figure(figsize = (10,6))
plt.plot(data_pd['time'], data_pd['Close'], label = nome_do_indice_ou_acao)


reg_01 = np.polyfit(data_pd['time'][ini_01:fim_01], data_pd['Close'][ini_01:fim_01], deg = 1)
trend_01 = np.polyval(reg_01, data_pd['time'][ini_01:fim_01])
std_01 = data_pd['Close'][ini_01:fim_01].std()
plt.plot(data_pd['time'][ini_01:fim_01],trend_01, 'r--')
plt.plot(data_pd['time'][ini_01:fim_01],trend_01-std_01, 'g--')
plt.plot(data_pd['time'][ini_01:fim_01],trend_01+std_01, 'g--')

reg_02 = np.polyfit(data_pd['time'][ini_02:fim_02], data_pd['Close'][ini_02:fim_02], deg = 1)
trend_02 = np.polyval(reg_02, data_pd['time'][ini_02:fim_02])
std_02 = data_pd['Close'][ini_02:fim_02].std()
plt.plot(data_pd['time'][ini_02:fim_02],trend_02, 'r--')
plt.plot(data_pd['time'][ini_02:fim_02],trend_02-std_02, 'g--')
plt.plot(data_pd['time'][ini_02:fim_02],trend_02+std_02, 'g--')

reg_03 = np.polyfit(data_pd['time'][ini_03:fim_03], data_pd['Close'][ini_03:fim_03], deg = 1)
trend_03 = np.polyval(reg_03, data_pd['time'][ini_03:fim_03])
std_03 = data_pd['Close'][ini_03:fim_03].std()
plt.plot(data_pd['time'][ini_03:fim_03],trend_03, 'r--')
plt.plot(data_pd['time'][ini_03:fim_03],trend_03-std_03, 'g--')
plt.plot(data_pd['time'][ini_03:fim_03],trend_03+std_03, 'g--')
Risco: iBovespa x Desvio Padrão da Amostra

Aqui vemos que, dependendo do intervalo, além da tendência variar, o Desvio (e portanto o Risco) varia.

Você AI Product Manager, ou investidor, ao olhar pra esse gráfico, pensaria o que? Eu pensaria que preciso desesperadamente achar os pontos de quebra da tendência, quais variáveis poderiam me indicar isso, rs* Mas isso é outra história. Hoje falamos de risco, e acho que o mais importante é ver o risco. Vendo, você consegue tomar decisões mais claras. Sem ver, não consegue.

Conclusões

Risco é importante pra carreira e para a vida. Durante toda a nossa vida a gente toma decisões, esperando resultados. Mas poucas vezes ponderamos o risco, o risco daquele resultado tão esperado acontecer ou não. E se a gente não pondera isso, tá dizendo que o risco é todo igual.

Para tomar as melhores decisões, temos que usar tudo que temos ao nosso alcance. E saber o conceito de risco é uma dessas coisas.

Links Interessantes:

Notebook usado nesse artigo (GitHub).

--

--

Christian Zambra
productmanagerslife

Passionate to learn; believes that new products are made to change people’s life for better; Fuzzy AND Techie :) B. Engineering & Advertising. Alma Matter: USP