# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + [markdown] id="NYbON1c1ImwA"
# # Aula 1

# + [markdown] id="KVZOBoSHJL2_"
# ## Colab e Kaggle

# + [markdown] id="zegDJZcnInbu"
# Nós vamos usar uma base de dados do Kaggle chamada [Fraud Detection Example](https://www.kaggle.com/gopalmahadevan/fraud-detection-example) e ela tem uma fração de dados do [PaySim](https://github.com/EdgarLopezPhD/PaySim), um simulador de dados financeiros feito exatamente para detecção de fraude.

# + [markdown] id="CgXdNw8NInyO"
# **Variáveis do dataset**
#
# **step** - mapeia uma unidade de tempo no mundo real. Neste caso, 1 passo é 1 hora de tempo. Total de etapas 744 (simulação de 30 dias).
#
# **type** - CASH-IN, CASH-OUT, DEBIT, PAYMENT and TRANSFER. 
# (caixa-de-entrada, caixa-de-saida, débito, pagamento e transferência)
#
# **amount** - valor da transação em moeda local.
#
# **nameOrig** - cliente que iniciou a transação
#
# **oldbalanceOrg** - saldo inicial antes da transação
#
# **newbalanceOrig** - novo saldo após a transação
#
# **nameDest** - cliente que é o destinatário da transação
#
# **oldbalanceDest** - destinatário do saldo inicial antes da transação. 
# Observe que não há informações para clientes que começam com M (Comerciantes).
#
# **newbalanceDest** - novo destinatário do saldo após a transação. Observe que não há informações para clientes que começam com M (Comerciantes).
#
# **isFraud** - São as transações feitas pelos agentes fraudulentos dentro da simulação. Neste conjunto de dados específico, o comportamento fraudulento dos agentes visa lucrar ao assumir o controle das contas dos clientes e tentar esvaziar os fundos transferindo para outra conta e depois sacando do sistema.
#
# **isFlaggedFraud** - O modelo de negócios visa controlar transferências massivas de uma conta para outra e sinaliza tentativas ilegais. Uma tentativa ilegal neste conjunto de dados é uma tentativa de transferir mais de 200.000 em uma única transação.
#

# + [markdown] id="ZJjM0peYKpoX"
# # Aula 2

# + [markdown] id="WvF1j4BXKtPI"
# ## Análise com Pandas

# + id="Rlx_Y8c8Kaf_"
import pandas as pd

# + colab={"base_uri": "https://localhost:8080/", "height": 424} id="5CechMX5KzWo" outputId="cd990986-54c0-485e-d5fc-25fd9619f42b"
df = pd.read_csv('/content/fraud_dataset_example.csv')
df

# + colab={"base_uri": "https://localhost:8080/"} id="XXWS0Wgxu8ai" outputId="04ece531-6d3b-4e34-ad54-2a1aad5f877a"
df.columns

# + [markdown] id="UkiZK5ecLf-P"
# ### Trazendo as colunas de fraude para o começo do dataset

# + colab={"base_uri": "https://localhost:8080/", "height": 206} id="Zfe1fPk8K3N-" outputId="41c92c02-9660-4f32-9a4e-95c83cc013db"
df = df[['isFraud',
       'isFlaggedFraud', 'step', 'type', 'amount', 'nameOrig', 'oldbalanceOrg', 'newbalanceOrig',
       'nameDest', 'oldbalanceDest', 'newbalanceDest']]
df.head()

# + [markdown] id="aDu_pDqULo2v"
# ### Renomeando as colunas

# + [markdown] id="veR6FVfPo9hY"
# Criando um dicionário
# ```
# colunas = {
#     'isFraud': 'fraude',
#     'isFlaggedFraud':'super_fraude',
#     'step':'tempo',
#     'type':'tipo',
#     'amount':'valor',
#     'nameOrig':'cliente1',
#     'oldbalanceOrg':'saldo_inicial_c1',
#     'newbalanceOrig':'novo_saldo_c1',
#     'nameDest':'cliente2',
#     'oldbalanceDest':'saldo_inicial_c2',
#     'newbalanceDest':'novo_saldo_c2',
# }
# ```

# + id="WVv3nNpVK382"
colunas = {
    'isFraud': 'fraude',
    'isFlaggedFraud':'super_fraude',
    'step':'tempo',
    'type':'tipo',
    'amount':'valor',
    'nameOrig':'cliente1',
    'oldbalanceOrg':'saldo_inicial_c1',
    'newbalanceOrig':'novo_saldo_c1',
    'nameDest':'cliente2',
    'oldbalanceDest':'saldo_inicial_c2',
    'newbalanceDest':'novo_saldo_c2',
}

# + colab={"base_uri": "https://localhost:8080/", "height": 206} id="upO8-lWoK43d" outputId="a90ebd9d-38f9-42c6-a288-11ea557c1429"
df = df.rename(columns = colunas)
df.head()

# + [markdown] id="tVJ4ujv4Ltcf"
# ### Outras informações do dataset

# + colab={"base_uri": "https://localhost:8080/", "height": 300} id="Jycj1niNK5o2" outputId="d8842333-a307-4b5e-de02-c74d903986e2"
df.describe()

# + [markdown] id="z-_wceH5MOTv"
# O método describe() fornece as informações sobre:
#
# **count** - Conta a quantidade de número de valores não vazios. Com esses valores podemos entender melhor o tamanho da amostra.
#
# **mean** - O valor médio, em média aritmética. Como ele faz uma média aritmética nem sempre mostra a realidade da maior parte dos casos do banco de dados.
#
# **std** - O desvio padrão. É a medida de como os dados se dispersam em relação à média, ou seja, o quanto eles estão espalhados.
#
# **min** e **max** - Valores que auxiliam a identificar a amplitude da amostra, entre o valor mínimo e máximo.
#
# **quartis** - Valores que nos mostram de que forma os dados foram distribuídos, por exemplo em 50% é a mediana e metade dos valores são inferiores a X valor, a outra metade é superior àquele valor.
#
# Para saber mais sobre esse método, acesse o artigo [Ampliando a análise com o Describe](https://www.alura.com.br/artigos/ampliando-a-analise-com-describe).
#

# + colab={"base_uri": "https://localhost:8080/", "height": 300} id="Djo35BPUK8EO" outputId="0f2ed2f1-a7e5-4cd3-f3ed-0a1938e974cd"
df.describe().T

# + colab={"base_uri": "https://localhost:8080/"} id="vA7jiRlMK83_" outputId="d7ccddac-9296-4e5f-e97b-1d1ab3f18898"
df.shape

# + colab={"base_uri": "https://localhost:8080/"} id="IznxOdQsy7af" outputId="2fc15746-76d8-4d04-dd75-d5402b6b4f4d"
df.info()

# + [markdown] id="eJazaOp9LFMQ"
# ### Verificando a variável target

# + colab={"base_uri": "https://localhost:8080/"} id="f22w57FzLKuM" outputId="b6641c5b-6a9c-4205-b88b-0c55fd862df2"
df.groupby('fraude').tempo.count()

# + colab={"base_uri": "https://localhost:8080/"} id="PRlXlN2QLLXP" outputId="44e65488-3e69-46bd-b662-3f70b7360b04"
df.isnull().values.any()

# + [markdown] id="RBpETqBaMizu"
# ## Encoding

# + [markdown] id="KrCm9qJEisBI"
# ### Pandas Profiling

# + [markdown] id="Jchv8BEBxojL"
# Instalando o Pandas Profiling
#
# ```!pip install -U pandas-profiling```

# + id="fHrjk6e4Mlv0"


# + id="NzOgDCuSMnNP"


# + [markdown] id="irDrx1CuiuKZ"
# ### Aplicando o Encoding

# + [markdown] id="nrkpbqfHnfdQ"
# #### **Tipos de encoding**
#
# **Label Encoding** - Renomea as classes com valores numéricos de 1 a **n**, sendo n o número de classes. Pode existir hierarquia entre as classes.
#
# **One-Hot Encoding** - Transforma as variáveis em **n** colunas binárias, sendo n o número de classes. Todas as classes são analisadas de forma igual, quando tiver a ocorrência dela a coluna terá o valor 1 e quando não o valor 0, isso acontece para as demais colunas criadas.
#
#

# + id="zXdieOLkNA8O"


# + [markdown] id="HwOXYrTCosAQ"
# #### Removendo variáveis

# + id="FMjzuys9NCVn"


# + [markdown] id="2dMihrBKNIEF"
# # Aula 3

# + [markdown] id="pfWzAWlrhfYR"
# ## Regressão Logística

# + id="A1rnkJ59NJ_2"


# + [markdown] id="j44GLj2AhilI"
# ## Balanceamento de dados

# + id="3s33yYyhhmVn"


# + [markdown] id="Kyvew0CchnhR"
# ## Formulando as hipóteses

# + id="IbcNWU4vhqGY"


# + [markdown] id="9sz-sfx4icAQ"
# **Inserir as hipóteses aqui!** (dê um duplo clique na célula)

# + [markdown] id="Lxuitc62hxuB"
# # Aula 4

# + [markdown] id="Sxc3b5Qkh2th"
# ## Árvore de Decisão

# + id="bgRmKIfahy2q"


# + [markdown] id="TVqmiB4yhzbg"
# ## Random Forest

# + id="tiZa5pIhh2Vs"


# + [markdown] id="-gdlvQUjh6WD"
# ## Análise de Métricas

# + id="fshZb8kBh8Z9"


# + [markdown] id="8r6EWH_Rh9Y4"
# # Aula 5

# + [markdown] id="I6gTbG8hiAR5"
# ## Melhorando o modelo

# + id="FWHfVIvxh-SC"


# + [markdown] id="yt-E3yVUh_PR"
# ## Resultados Finais

# + id="4yJaNnRsiFI5"


# + [markdown] id="hmI3dXt5iFf5"
# ## Conclusão

# + [markdown] id="Ofyqowo8iI8x"
# **Inserir as soluções para cada hipótese aqui!** (dê um duplo clique na célula)

StarcoderdataJupyterScriptsDedupFiltered