├── .gitignore ├── aula_2_pre_processamento_de_dados_em_python.ipynb ├── aula_3_analise_exploratoria_de_dados.ipynb ├── aula_4_distribuicoes_de_probabilidade.ipynb ├── aula_5_pensamento_estatistico_em_python.ipynb ├── aula_6_reducao_de_dimensionalidade_e_selecao_de_variaveis.ipynb ├── aula_7_feature_engineering.ipynb ├── aula_8_regressao_linear.ipynb └── aula_9_classificacao.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /aula_5_pensamento_estatistico_em_python.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Aula 5 - Pensamento estatístico em Python.ipynb", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "collapsed_sections": [] 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "Qv8_Q9knv3om", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "![Codenation](https://forum.codenation.com.br/uploads/default/original/2X/2/2d2d2a9469f0171e7df2c4ee97f70c555e431e76.png)\n", 25 | "\n", 26 | "__Autor__: Kazuki Yokoyama (kazuki.yokoyama@ufrgs.br)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "id": "FC9NvpcO7XjW", 33 | "colab_type": "text" 34 | }, 35 | "source": [ 36 | "# Pensamento estatístico em Python\n", 37 | "\n", 38 | "Neste módulo falaremos sobre testes de hipóteses.\n", 39 | "\n", 40 | "![hypthesis-testing](https://i1.wp.com/statisticsbyjim.com/wp-content/uploads/2018/07/TypesErrorHypothesisTests.png?resize=600%2C400)" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "metadata": { 46 | "id": "HK2aSUXU9I_s", 47 | "colab_type": "code", 48 | "colab": {} 49 | }, 50 | "source": [ 51 | "from math import sqrt\n", 52 | "\n", 53 | "import pandas as pd\n", 54 | "import matplotlib.pyplot as plt\n", 55 | "import numpy as np\n", 56 | "import statsmodels.api as sm\n", 57 | "import scipy.stats as sct\n", 58 | "import seaborn as sns" 59 | ], 60 | "execution_count": 0, 61 | "outputs": [] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "metadata": { 66 | "id": "GsoiY5gw9KJ_", 67 | "colab_type": "code", 68 | "colab": {} 69 | }, 70 | "source": [ 71 | "# Algumas configurações para o matplotlib.\n", 72 | "%matplotlib inline\n", 73 | "\n", 74 | "from IPython.core.pylabtools import figsize\n", 75 | "\n", 76 | "\n", 77 | "figsize(12, 8)\n", 78 | "\n", 79 | "sns.set()" 80 | ], 81 | "execution_count": 0, 82 | "outputs": [] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": { 87 | "id": "9U2fS1OAKHCB", 88 | "colab_type": "text" 89 | }, 90 | "source": [ 91 | "## Testes de hipóteses" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": { 97 | "id": "jXgrQ3Ef9FJ5", 98 | "colab_type": "text" 99 | }, 100 | "source": [ 101 | "### Introdução\n", 102 | "\n", 103 | "Já vimos antes como podemos fazer estimativas para parâmetros populacionais a partir de amostras da população. Agora veremos como testar hipóteses sobre parâmetros populacionais, incluindo sua distribuição. Testes de hipóteses são as principais ferramentas da inferência estatística para isso.\n", 104 | "\n", 105 | "Em um teste de hipóteses, formulamos duas hipóteses __complementares__ a respeito de um parâmetro populacional de interesse chamadas hipótese nula (_null hypothesis_) e hipótese alternativa (_alternative hypothesis_). Denotamos a hipótese nula por $H_{0}$ e a hipótese alternativa por $H_{1}$.\n", 106 | "\n", 107 | "__Exemplo__:\n", 108 | "\n", 109 | "Podemos estar interessados na média dos pesos de determinada população ($\\mu$) e queremos testar se seu valor verdadeiro é 70 kg a partir de uma amostra coletada. Para isso, geramos as seguintes hipóteses:\n", 110 | "\n", 111 | "$$\n", 112 | "\\begin{cases}\n", 113 | " H_{0}: \\mu = 70 & \\quad \\text{(Hipótese nula)} \\\\\n", 114 | " H_{1}: \\mu \\neq 70 & \\quad \\text{(Hipótese alternativa)}\n", 115 | "\\end{cases}\n", 116 | "$$\n", 117 | "\n", 118 | "Então seguimos um procedimento para avaliar se devemos:\n", 119 | "\n", 120 | "1. Rejeitar a hipótese nula em favor da hipótese alternativa. Nesse caso, diríamos que a verdadeira média populacional _não_ é 70 kg, mas não conseguiríamos afimar qual é o seu verdadadeiro valor.\n", 121 | "2. Não rejeitar a hipótese nula, mantendo-a. Nesse caso, diríamos que não temos evidências o suficiente para rejeitar a hipótese de que a verdadeira média populacional é 70 kg. No entanto, isso não significa que a média deva ser de fato 70 kg, mas sim que a nossa amostra parece sustentar essa ideia.\n", 122 | "\n", 123 | "> Apesar de comum, é incorreto dizer que \"aceitamos a hipótese nula\". Na verdade, simplesmente __não__ a rejeitamos por falta de evidências.\n", 124 | "\n", 125 | "Algumas observações sobre as hipóteses acima:\n", 126 | "\n", 127 | "* Notem como as duas hipóteses são complementares.\n", 128 | "* As hipóteses são feitas sobre o parâmetro populacional ($\\mu$) e não sobre o estimador amostral (que poderia ser $\\bar{X}$).\n", 129 | "* Só existem duas hipóteses. Não podemos gerar múltiplas hipóteses simultaneamente.\n", 130 | "* O resultado do teste não nos diz nada sobre nossa teoria, e sim sobre o que os dados indicam." 131 | ] 132 | }, 133 | { 134 | "cell_type": "markdown", 135 | "metadata": { 136 | "id": "ixmJD-GOH3OX", 137 | "colab_type": "text" 138 | }, 139 | "source": [ 140 | "### Funcionamento\n", 141 | "\n", 142 | "Para seguir com o nosso teste de hipóteses (TH), devemos coletar uma amostra da população e trabalhar com algum estimador do parâmetro populacional sob estudo. No caso acima, podemos utilizar a média amostral ($\\bar{X}$) que é o melhor estimador para a média populacional.\n", 143 | "\n", 144 | "Imagine que a média da amostral foi 74 kg. Note como isso pode ocorrer mesmo quando a verdadeira média populacional é 70 kg, pois a amostra é aleatória, e para cada amostra aleatória, obteríamos um valor diferente para a média.\n", 145 | "\n", 146 | "A questão é: essa diferença de 4 kg foi devido ao acaso (devido a aleatoriedade da amostra) ou porque a média populacional não é mesmo 70 kg (talvez 73 kg)? É para responder a esse tipo de questão que usamos o TH." 147 | ] 148 | }, 149 | { 150 | "cell_type": "markdown", 151 | "metadata": { 152 | "id": "gh85LB7jKEWQ", 153 | "colab_type": "text" 154 | }, 155 | "source": [ 156 | "__Todo procedimento de um TH é feito considerando a $H_{0}$ verdadeira__.\n", 157 | "\n", 158 | "Podemos considerar inicialmente que a verdadeira média populacional é de fato $\\mu = 70$ e que os pesos são normalmente distribuídos (depois veremos como relaxar essa suposição).\n", 159 | "\n", 160 | "Sendo isso verdade, as médias de pesos das amostras devem se distribuir normalmente em torno de 70 kg. O que devemos então fazer é definir uma região onde ainda consideramos aceitável presumir que a verdadeira média é 70 kg. Tudo que estiver fora dessa região é considerado \"muito longe\" para que a verdadeira média seja 70 kg.\n", 161 | "\n", 162 | "A primeira região (a que sustenta a hipótese da média real 70 kg) é chamada __região de aceitação__ (RA), e tudo que estiver fora dela é chamado __região crítica__ (RC).\n", 163 | "\n", 164 | "Por exemplo, podemos definir RA como sendo o intervalo de 68 kg a 72 kg, ou seja, consideramos que qualquer diferença de 2kg ou menos de 70 kg é devido ao acaso. Qualquer valor fora desse intervalo já é longe demais de 70 kg para que esta seja a verdadeira média. Nesse cenário, a nossa média amostral de 74 kg cai na RC e portanto rejeitaríamos a hipótese nula.\n", 165 | "\n", 166 | "O que precisamos agora é de um meio formal de definir essas regiões. Para isso, utilizaremos a informação de que, sob a hipótese nula, a média amostral $\\bar{X}$ tem distribuição normal em torno de $\\mu = 70$. E em vez de definirmos o tamanho da região de aceitação, definimos o tamanho da região crítica." 167 | ] 168 | }, 169 | { 170 | "cell_type": "markdown", 171 | "metadata": { 172 | "id": "TQigeNcbTF9u", 173 | "colab_type": "text" 174 | }, 175 | "source": [ 176 | "Todo TH conta com uma estatística de teste (vamos chamá-la de $T$), que é gerada a partir da amostra. A partir dessa estatística de teste e de sua distribuição, podemos definir RA e RC em termos de probabilidade.\n", 177 | "\n", 178 | "Por exemplo, podemos construir essas regiões de forma que, se $H_{0}$ for verdadeira, então $T$ tem 5% de probabilidade de cair na RC. Essa probabilidade de cair na região crítica, sendo $H_{0}$ verdadeira, é uma probabilidade de erro. Esse erro é chamado de Erro Tipo I e sua probabilidade é chamada __nível de significância__ e denotada por $\\alpha$.\n", 179 | "\n", 180 | "Podemos cometer outro tipo de erro ao não rejeitarmos $H_{0}$ quando ela é realmente falsa. Esse é o Erro Tipo II e sua probabilidade é denotada por $\\beta$.\n", 181 | "\n", 182 | "Em resumo:\n", 183 | "\n", 184 | "$$\\alpha = P(\\text{Erro Tipo I}) = P(\\text{rejeitar } H_{0} | H_{0} \\text{ verdadeira})$$\n", 185 | "$$\\beta = P(\\text{Erro Tipo II}) = P(\\text{não rejeitar } H_{0} | H_{0} \\text{ falsa})$$\n", 186 | "\n", 187 | "> $\\alpha$ e $\\beta$ não possuem relação matemática.\n", 188 | "\n", 189 | "__Quando criamos um TH, devemos decidir *a priori* o valor de $\\alpha$__. Ele será nossa base de comparação para rejeitarmos ou não a $H_{0}$. Não fazer isso é chamado _p-value hacking_.\n", 190 | "\n", 191 | "Valores típicos de $\\alpha$ são 0.025, 0.05 e 0.10." 192 | ] 193 | }, 194 | { 195 | "cell_type": "markdown", 196 | "metadata": { 197 | "id": "ttPP2_m7gBzX", 198 | "colab_type": "text" 199 | }, 200 | "source": [ 201 | "### Classificação do teste de hipóteses\n", 202 | "\n", 203 | "Os TH podem ser classificados em:\n", 204 | "\n", 205 | "* Bilaterais: quando a região crítica encontra-se dos dois lados da distribuição de $T$ sob $H_{0}$.\n", 206 | "* Unilaterais: quando a região crítica encontra-se somente de um dos lados da distribuição de $T$ sob $H_{0}$.\n", 207 | "\n", 208 | "Quando o TH é bilateral, a probabilidade $\\alpha$ geralmente é dividida em duas partes iguais, uma em cada lado da distribuição. Quando o TH é unilateral, toda probabilidade acumula-se em um dos lados.\n", 209 | "\n", 210 | "Também podemos falar em hipóteses alternativas simples e compostas:\n", 211 | "\n", 212 | "* Simples: quando não desigualdade.\n", 213 | "* Composta: quando há desigualdade.\n", 214 | "\n", 215 | "Na figura a seguir, consideramos que $H_{0}: \\mu = \\mu_{0}$ e mostramos o caso bilateral e dois unilaterais:\n", 216 | "\n", 217 | "![hypothesis-testing](https://cdn-images-1.medium.com/max/1200/1*-aqjLkyD-mXsA2Hxa8cKSg.jpeg)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "markdown", 222 | "metadata": { 223 | "id": "UZAHGAvvWJJx", 224 | "colab_type": "text" 225 | }, 226 | "source": [ 227 | "### Valor-p\n", 228 | "\n", 229 | "O valor-p (do Inglês, _p-value_), também chamado de _nível descritivo_, de um TH é um valor associado ao resultado, $t^{*}$, da estatística de teste $T$ sob $H_{0}$.\n", 230 | "\n", 231 | "__O valor-p é a probabilidade de $T$ tomar um valor igual ou mais extremo que $t^{*}$, sendo $H_{0}$ verdadeira__.\n", 232 | "\n", 233 | "Obviamente, se essa probabilidade for muito baixa, podemos interpretar que é muito raro encontrarmos $t^{*}$ se $H_{0}$ for realmente verdadeira. Por outro lado, se ela for alta, podemos concluir que deve ser razoável encontrarmos esse valor de $t^{*}$ quando $H_{0}$ é verdadeira.\n", 234 | "\n", 235 | "Mas qual o limiar? O que é considerada uma probabilidade baixa ou alta? É aí que entra o $\\alpha$ novamente!\n", 236 | "\n", 237 | "O nosso limiar é o valor de $\\alpha$ estabelecido:\n", 238 | "\n", 239 | "* Se o valor-p for menor que $\\alpha$, então $t^{*}$ caiu dentro da região crítica, e portanto devemos rejeitar $H_{0}$.\n", 240 | "* Se o valor-p for maior que $\\alpha$, então $t^{*}$ caiu na região de aceitação e devemos não rejeitar $H_{0}$.\n", 241 | "\n", 242 | "Essa é a importância de estabelecermos $\\alpha$ antes do experimento. Do contrário, poderíamos ajustar o valor de $\\alpha$ para atender nossas expectativas sobre o resultado.\n", 243 | "\n", 244 | "É importante notar que o valor-p faz sentido no contexto da estatística frequentista, ou seja, considerando a probabilidade no \"longo prazo\". Além disso, ele nada nos afirma sobre a teoria sendo testada, apenas o que os dados dizem.\n", 245 | "\n", 246 | "Também temos outra interpretação para o valor-p: __O valor-p é o menor nível de significância, $\\alpha$, para o qual rejeitaríamos $H_{0}$__.\n", 247 | "\n", 248 | "![p-value](https://i.stack.imgur.com/idDTA.png)\n", 249 | "\n", 250 | "É importante notar que o valor-p é usado extensivamente na estatística frequentista, mas a estatística Bayesiana possui outra abordagem que dispensa o valor-p.\n", 251 | "\n", 252 | "O valor-p é considerado perigoso, pois muitas pessoas não sabem utilizá-lo adequadamente, nem interpretá-lo corretamente, levando a uma série de conclusões duvidosas.\n", 253 | "\n", 254 | "__Lembre-se: o valor-p nos permite fazer afimarções sobre os dados, não sobre a teoria sendo testada__.\n", 255 | "\n", 256 | "Mas como o próprio valor-p se distribui?\n", 257 | "\n", 258 | "De forma geral:\n", 259 | "\n", 260 | "* Quando $H_{0}$ é realmente falsa, a distribuição do valor-p depende do poder do teste, ou seja, da capacidade do teste de detectar uma $H_{0}$ falsa. Quanto maior o poder do teste, maior a chance de obtermos um $\\alpha$ pequeno ($< 0.05$).\n", 261 | "\n", 262 | "![1](https://drive.google.com/uc?export=download&id=12Z1cB5T9P2kMp7PXB_xuHitaKwcxbrKF)\n", 263 | "\n", 264 | "* Quando $H_{0}$ é realmente verdadeira, o valor-p tem distribuição uniforme, com $100\\alpha\\%$ dos valores-p sendo menores que $\\alpha$. Em outras palavras, temos $100\\alpha\\%$ de chance de cometermos um Erro Tipo I.\n", 265 | "\n", 266 | "![2](https://drive.google.com/uc?export=download&id=1PD-1URs2FzaHEF1ZLV2Ajlb0tvY0OXcU)\n", 267 | "\n", 268 | "Vamos fazer simulações de Monte-Carlo para mostrar isso:" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "metadata": { 274 | "id": "reI10ijK_yEc", 275 | "colab_type": "code", 276 | "outputId": "151a3018-2486-49dd-ff4d-0ea90588aaf4", 277 | "colab": { 278 | "base_uri": "https://localhost:8080/", 279 | "height": 600 280 | } 281 | }, 282 | "source": [ 283 | "# H_0 é falsa.\n", 284 | "\n", 285 | "pvalues1 = []\n", 286 | "for i in range(1000):\n", 287 | " pvalues1.append(sct.ttest_1samp(sct.norm.rvs(loc=10, scale=5, size=100), popmean=9.5).pvalue) # Menor poder.\n", 288 | "\n", 289 | "pvalues2 = []\n", 290 | "for i in range(1000):\n", 291 | " pvalues2.append(sct.ttest_1samp(sct.norm.rvs(loc=10, scale=5, size=100), popmean=9).pvalue) # Maior poder.\n", 292 | "\n", 293 | "\n", 294 | "fig, axs = plt.subplots(1, 2, figsize=(20, 10))\n", 295 | "sns.distplot(pvalues1, kde=False, bins=20, hist_kws={\"density\": True}, ax=axs[0])\n", 296 | "sns.distplot(pvalues2, kde=False, bins=20, hist_kws={\"density\": True}, ax=axs[1]);" 297 | ], 298 | "execution_count": 0, 299 | "outputs": [ 300 | { 301 | "output_type": "display_data", 302 | "data": { 303 | "image/png": "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\nAABAIiwCAAAAIBEWAQAAAJAIiwAAAABIhEUAAAAAJMIiAAAAABJhEQAAAACJsAgAAACARFgEAAAA\nQCIsAgAAACARFgEAAACQCIsAAAAASIRFAAAAACTCIgAAAAASYREAAAAAibAIAAAAgERYBAAAAEAi\nLAIAAAAgERYBAAAAkAiLAAAAAEiERQAAAAAkwiIAAAAAEmERAAAAAImwCAAAAIBEWAQAAABAIiwC\nAAAAIBEWAQAAAJAIiwAAAABIhEUAAAAAJMIiAAAAABJhEQAAAACJsAgAAACARFgEAAAAQCIsAgAA\nACARFgEAAACQCIsAAAAASIRFAAAAACTCIgAAAAASYREAAAAAibAIAAAAgERYBAAAAEAiLAIAAAAg\nqSks6u3tjdmzZ8esWbNi8+bNH7rmrrvuii984Qsxf/78mD9/fqxYsaKujQIAAACQvVIti84+++z4\ngz/4g7j44os/ct2CBQti6dKldWkMAAAAgPzVFBaddtppWfcBAAAAwAGgrvcsWrduXcybNy8uv/zy\n+MlPflLP0gAAAADkoKYri2px4YUXxlVXXRWtra2xYcOGWLJkSaxfvz4OO+ywmmvMmDGtXu3spX9o\nODqmHZxJ7dbWUma129vbotzZnkntPJTLHY1uYUox7/yZeb7MO39mDgAwNdUtLCqXy+njM888M7q7\nu+Oll16Kz3/+8zXXGBzcGePj1Xq19P+0tMSOnXvqXzciRkfHMqs9PDwSA5VKJrWzVi53xMDAjka3\nMWWYd/7MPF/mnb96z7xYLGR2UggAgPqq2za07du3p483bdoUb775Zhx//PH1Kg8AAABADmq6suiW\nW26JJ554It5666247LLLYvr06bFu3bpYvHhxXHPNNXHSSSfFHXfcES+88EIUi8VobW2N2267ba+r\njQAAAAA48NUUFi1fvjyWL1++z+urVq1KH/f29tavKwAAAAAaoq5PQwMAAACguQmLAAAAAEiERQAA\nAAAkwiIAAAAAEmERAAAAAImwCAAAAIBEWAQAAABAIiwCAAAAIBEWAQAAAJAIiwAAAABIhEUAAJPE\nd77znZg1a1Zs3ry50a0AAE1MWAQAMAm88MIL8d///d9x1FFHNboVAKDJCYsAAJrce++9FytXroyb\nbrqp0a0AAJNAqdENAADwy7nzzjvjggsuiKOPPvpjff+MGdPq3NEv9A8NR8e0gzOp3d7eFuXO9kxq\n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\nAHt5/+l21QzuE3WgBSO1yjJUPNC2Qh44nQAAAAA1y3r73H/9bHt0TDu47veJOtCCEfblbwcAAACa\nULNun3OPqANfTWHRli1bYtmyZfHOO+/E9OnTo7e3N4477ri91lQqlbjlllvi6aefjkKhEFdeeWUs\nXLgwi54BAPiAWo7VAOBA0awh11RS0y7BG2+8MS666KJ4/PHH46KLLoobbrhhnzWPPvpovPbaa/HE\nE0/EQw89FHfddVe88cYbdW8YAIC91XKsBgBQqwmvLBocHIyNGzfG9773vYiImDt3btx8880xNDQU\nnZ2dad369etj4cKFUSwWo7OzM+bMmROPPfZYXHHFFTU3UywWPsYfYWLVYiHaD27NpHappaj2h9T+\nRFspKmP1r9+sM8m6fqnFv/G8a/s3nm9t88639vvvx/V8X87qPZ7aj9U+imOwyVPbz8t8a5t3frXf\nr2/m+dfOYubNPpOsan/w/bhe780ft06hWq1+5I6+559/PpYuXRrr1q1Lr/32b/92fPvb345f+7Vf\nS6/NmzcvvvWtb8VnPvOZiIhYtWpVbN++PZYvX/6xGgMAYGK1HqsBANSqCR9WBwAAAEBWJgyLuru7\nY/v27VGpVCLiFzey7u/vj+7u7n3Wbd26NX3e19cXRxxxRJ3bBQDgg2o9VgMAqNWEYdGMGTOip6cn\n1q5dGxERa9eujZ6enn32wJ9//vmxevXqGB8fj6GhoXjyySfjvPPOy6ZrAAAiovZjNQCAWk14z6KI\niJdffjmWLVsW7777bhxyyCHR29sbv/IrvxKLFy+Oa665Jk466aSoVCqxcuXK2LBhQ0RELF68OBYt\nWpT5HwAAYKr7347VAAA+jprCIgAAAACmBje4BgAAACARFgEAAACQCIsAAAAASIRFAAAAACSTJiza\nsmVLLFq0KM4777xYtGhRvPLKK/usqVQqsWLFipgzZ06cc845sXr16vwbnURqmfndd98dX/7yl2Pe\nvHnxla98JZ5++un8G50kapn3+37+85/HySefHL29vfk1OAnVOvP169fHvHnzYu7cuTFv3rx46623\n8m10kqhl3oODg3HllVfGvHnz4ktf+lLcdNNNMTY2ln+zk0Bvb2/Mnj07Zs2aFZs3b/7QNd43qYVj\nsPw5Bsuf47B8OQbLn+OwfDXFcVh1krj00kura9asqVar1eqaNWuql1566T5rHn744erll19erVQq\n1cHBwepZZ51Vff311/NuddKoZeY//vGPq8PDw9VqtVrdtGlT9dRTT63u3r071z4ni1rmXa1Wq2Nj\nY9VLLrmk+ud//ufVv/qrv8qzxUmnlpn/z//8T/VLX/pStb+/v1qtVqvvvvtudc+ePbn2OVnUMu9b\nbrkl/bt+7733qr/7u79bXbduXa59ThbPPvtsdevWrdUvfvGL1RdffPFD13jfpBaOwfLnGCx/jsPy\n5Rgsf47D8tUMx2GT4sqiwcHB2LhxY8ydOzciIubOnRsbN26MoaGhvdatX78+Fi5cGMViMTo7O2PO\nnDnx2GOPNaLlplfrzM8666z4xCc+ERERs2bNimq1Gu+8807u/Ta7WucdEXH//ffHb/3Wb8Vxxx2X\nc5eTS60z//73vx+XX355lMvliIjo6OiItra23PttdrXOu1AoxK5du2J8fDzee++9GB0dja6urka0\n3PROO+206O7u/sg13jeZiGOw/DkGy5/jsHw5Bsuf47D8NcNx2KQIi/r6+qKrqytaWloiIqKlpSVm\nzpwZfX19+6w78sgj0+fd3d2xbdu2XHudLGqd+QetWbMmPvWpT8URRxyRV5uTRq3z/tnPfhbPPPNM\n/OEf/mEDupxcap35yy+/HK+//npcfPHF8Tu/8ztxzz33RLVabUTLTa3WeS9ZsiS2bNkSv/Ebv5H+\nO/XUUxvR8pTgfZOJOAbLn2Ow/DkOy5djsPw5DjswNfq9c1KERRz4/uM//iPuvPPO+Ou//utGtzJp\njY7+n3buHqRxOA7j+HNBnFR8mVqcClKLOLs41cEO4iLo6FRHoYNUkCK+LHVUnEV00kmoICIdQkUL\ngtDNwaVQRS0ODg6WtDcchJODM3fH/WPi97MVOjz8CPk//JK2oVwup5WVFfdGj//PcRzd3NxoZ2dH\ne3t7sm1bR0dHfscKrZOTE8XjcZVKJdm2raurK95OAIDfoIOZQQ8zjw5mHj3sawnFsigSiejh4UGO\n40j6ceN4fHz85bWuSCSiu7s79/P9/T1PWP6S15lL0vX1tRYWFrS9va1YLGY6aih4mffT05Oq1arm\n5uaUTCa1u7urg4MD5XI5v2IHmtdrPBqNKpVKqb29XR0dHRobG1OlUvEjcqB5nff+/r4mJydlWZY6\nOzuVTCZVLpf9iPwlcG7iI3Qw8+hg5tHDzKKDmUcP+5z8PjtDsSzq6+tTIpFQoVCQJBUKBSUSCfX2\n9r77XiqV0uHhoZrNpp6fn3V2dqbx8XE/Igee15lXKhVlMhltbm5qaGjIj6ih4GXe0WhU5XJZxWJR\nxWJRs7Ozmp6e1traml+xA83rNT4xMaFSqaRWq6VGo6HLy0sNDg76ETnQvM67v79ftm1Lkt7e3nRx\ncaGBgQHjeb8Kzk18hA5mHh3MPHqYWXQw8+hhn5PfZ+e3Vkh+2Hl7e6vFxUW9vLyoq6tL+XxesVhM\n6XRa8/PzGh4eluM4Wl1d1fn5uSQpnU5rZmbG5+TB5WXmU1NTqtVq7/74bGNjQ/F43MfkweRl3j/b\n2trS6+urstmsT4mDz8vMm82m8vm8bNuWZVkaHR1VNpuVZYViF2+Ul3lXq1UtLy+rXq/LcRyNjIxo\naWlJbW1tfscPnPX1dZ2enqper6unp0fd3d06Pj7m3MQfo4OZRwczjx5mFh3MPHqYWUHoYaFZFgEA\nAAAAAODfsXYFAAAAAACAi2URAAAAAAAAXCyLAAAAAAAA4GJZBAAAAAAAABfLIgAAAAAAALhYFgEA\nAAAAAMDFsggAAAAAAAAulkUAAAAAAABwfQfELLMEVl6LdgAAAABJRU5ErkJggg==\n", 304 | "text/plain": [ 305 | "
" 306 | ] 307 | }, 308 | "metadata": { 309 | "tags": [] 310 | } 311 | } 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "metadata": { 317 | "id": "W4q6OtvwCHnT", 318 | "colab_type": "code", 319 | "outputId": "14fb01f3-7288-4ba8-8f1b-26edb91e8d72", 320 | "colab": { 321 | "base_uri": "https://localhost:8080/", 322 | "height": 491 323 | } 324 | }, 325 | "source": [ 326 | "# H_0 é verdadeira.\n", 327 | "\n", 328 | "pvalues = []\n", 329 | "for i in range(1000):\n", 330 | " pvalues.append(sct.ttest_1samp(sct.norm.rvs(loc=10, scale=5, size=100), popmean=10).pvalue)\n", 331 | "\n", 332 | "\n", 333 | "sns.distplot(pvalues, kde=False, bins=20, hist_kws={\"density\": True});" 334 | ], 335 | "execution_count": 0, 336 | "outputs": [ 337 | { 338 | "output_type": "display_data", 339 | "data": { 340 | "image/png": "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\nAFAgmAEAoEAwAwBAgWAGAIACwQwAAAWCGQAACgQzAAAUCGYAACgQzAAAUCCYAQCgQDADAECBYAYA\ngALBDAAABYIZAAAKBDMAABQIZgAAKBDMAABQIJgBAKBAMAMAQIFgBgCAAsEMAAAFghkAAAoEMwAA\nFAhmAAAoEMwAAFAgmAEAoEAwAwBAgWAGAIACwQwAAAWCGQAACgQzAAAUCGYAACgQzAAAUCCYAQCg\nQDADAECBYAYAgIL2Wg7avXt37rvvvrz//vu58MILMzIykssuu+ykY5544ols3rw5ra2tWbBgQe6+\n++5cd91187FmAACom5qCecOGDVm3bl3WrFmTF154IevXr89zzz130jFf/OIXc+edd+aCCy7Izp07\nc/vtt2fbtm05//zz52XhAABQD6c8JWNiYiJjY2MZHBxMkgwODmZsbCyTk5MnHXfdddflggsuSJIs\nW7Ys1Wo177///jwsGQAA6ueUwTw+Pp7e3t60tbUlSdra2rJ48eKMj4//zq95/vnnc+mll+biiy+e\nu5UCAEAD1HRKxmy89tprefTRR/O9731v1l/b3b1orpdTk4ULO9K5qP6njixY0N5Ucxs9u9lus32u\nn2a8rxt5mxP73Axzk+ba52Z8fC1c2JEk6enprPvs2TplMPf19WXfvn2pVCppa2tLpVLJ/v3709fX\n95Fj33jjjdxzzz158skns3Tp0lkvZmLiUGZmqrP+ujPR09OZqamjOXjoSF3nJsn09PGmmtvo2c12\nm+1z/TTjfd3I25zY52aYmzTXPjfj42tq6mjStTAHDhys69zW1pZZv0h7ylMyuru709/fn9HR0STJ\n6Oho+vv709XVddJx27dvz913353HHnssV1xxxawWAQAAZ6uarsP80EMPZePGjRkYGMjGjRszPDyc\nJBkaGsqOHTuSJMPDwzly5EjWr1+fNWvWZM2aNXnzzTfnb+UAAFAHNZ3DfPnll2fTpk0f+fzTTz99\n4t//+q//OnerAgCAs4S/9AcAAAWCGQAACgQzAAAUCGYAACgQzAAAUCCYAQCgQDADAECBYAYAgALB\nDAAABYIZAAAKBDMAABQIZgAAKBDMAABQIJgBAKBAMAMAQIFgBgCAAsEMAAAFghkAAAoEMwAAFAhm\nAAAoEMwAAFAgmAEAoEAwAwBAgWAGAIACwQwAAAWCGQAACgQzAAAUCGYAACgQzAAAUCCYAQCgQDAD\nAECBYAYAgALBDAAABYIZAAAKBDMAABQIZgAAKBDMAABQIJgBAKBAMAMAQIFgBgCAAsEMAAAFghkA\nAAoEMwAAFAhmAAAoEMwAAFAgmAEAoEAwAwBAgWAGAIACwQwAAAWCGQAACgQzAAAUCGYAACioKZh3\n796dtWvXZmBgIGvXrs0777zzkWMqlUqGh4ezYsWK3HTTTdm0adNcrxUAAOqupmDesGFD1q1bl5de\neinr1q3L+vXrP3LMiy++mD179uTll1/OD3/4wzz++OP5zW9+M+cLBgCAemo/1QETExMZGxvLM888\nkyQZHBzMww8/nMnJyXR1dZ04bvPmzbnlllvS2tqarq6urFixIlu2bMk3vvGNmhfT2tpyGjfhzLW3\ntWbh+QvMPYdnt7e1NOFtts/1m9uM93Ujb7N9boa5F3S0p3K8uW5zMz6+kvr33+nMO2Uwj4+Pp7e3\nN21tbUmStra2LF68OOPj4ycF8/j4eJYsWXLi476+vuzdu3dWi7noot+b1fFz5ZK+388lfb/fkNlL\nL7moqeY2cvZnej/VkLmJfa6nRu1zM97XjbzN9tncc3F2M97mJOnuXtSw2bXypj8AACg4ZTD39fVl\n3759qVQqSX775r79+/enr6/vI8e9++67Jz4eHx/PxRdfPMfLBQCA+jplMHd3d6e/vz+jo6NJktHR\n0fT39590OkaSrFy5Mps2bcrMzEwmJyfzyiuvZGBgYH5WDQAAddJSrVarpzrorbfeyn333ZcPPvgg\nn/rUpzIyMpKlS5dmaGgo3/72t/OFL3whlUol3/nOd/LTn/40STI0NJS1a9fO+w0AAID5VFMwAwBA\ns/KmPwAAKBDMAABQIJgBAKBAMAMAQIFgBgCAgqYI5t27d2ft2rUZGBjI2rVr884773zkmEqlkuHh\n4axYsSI33XRTNm3aVP+FckZq2ecnnngiq1atyurVq/PVr341P/nJT+q/UM5ILfv8/7z99tu58sor\nMzIyUr8FMidq3efNmzdn9erVGRwczOrVq/Pee+/Vd6GckVr2eWJiInfddVdWr16dL3/5y3nooYdy\n/Pjx+i+W0zYyMpLly5dn2bJl2bVr18cec9Z3WLUJfP3rX68+//zz1Wq1Wn3++eerX//61z9yzL/9\n279V77zzzmqlUqlOTExUr7vuuuqvf/3rei+VM1DLPm/durU6NTVVrVar1V/96lfVq666qvrhhx/W\ndZ2cmVr2uVqtVo8fP169/fbbq3/9139d/bu/+7t6LpE5UMs+b9++vfrlL3+5un///mq1Wq1+8MEH\n1SNHjtR1nZyZWvb5kUceOfEcPnbsWPVrX/ta9Uc/+lFd18mZef3116vvvvtu9Q//8A+rb7755sce\nc7Z32Dn/CvPExETGxsYyODiYJBkcHMzY2FgmJydPOm7z5s255ZZb0tramq6urqxYsSJbtmxpxJI5\nDbXu83XXXZcLLrggSbJs2bJUq9W8//77dV8vp6fWfU6Sp556KjfccEMuu+yyOq+SM1XrPn//+9/P\nnXfemZ6eniRJZ2dnOjo66r5eTk+t+9zS0pLDhw9nZmYmx44dy/T0dHp7exuxZE7T1Vdfnb6+vuIx\nZ3uHnfPBPD4+nt7e3rS1tSVJ2trasnjx4oyPj3/kuCVLlpz4uK+vL3v37q3rWjl9te7z//b888/n\n0ksvzcUXX1yvZXKGat3nnTt3Ztu2bfmLv/iLBqySM1XrPr/11lv59a9/ndtuuy1/8id/kieffDJV\nf4vrE6PWff7mN7+Z3bt359prrz3xv6uuuqoRS2Yene0dds4HM3yc1157LY8++mj+4R/+odFLYY5N\nT0/nwQcfzPDw8In/EHNuqlQqefPNN/PMM8/kn//5n7N169a88MILjV4Wc2zLli1ZtmxZtm3blq1b\nt+Y//uM/zqpXHmkO53ww9/X1Zd++falUKkl++wN2//79H/m/Bvr6+vLuu++e+Hh8fNwrj58gte5z\nkrzxxhu555578sQTT2Tp0qX1XipnoJZ9PnDgQPbs2ZO77rory5cvz7PPPpt/+Zd/yYMPPtioZTNL\ntT6flyxZkpUrV+a8887LokWLcuONN2b79u2NWDKnodZ93rhxY77yla+ktbU1nZ2dWb58eV599dVG\nLJl5dLZ32DkfzN3d3env78/o6GiSZHR0NP39/enq6jrpuJUrV2bTpk2ZmZnJ5ORkXnnllQwMDDRi\nyZyGWvd5+/btufvuu/PYY4/liiuuaMRSOQO17POSJUvy6quv5sc//nF+/OMf58///M9z66235uGH\nH27UspmlWp/Pg4OD2bZtW6rVaqanp/Pzn/88n//85xuxZE5Drft8ySWXZOvWrUmSY8eO5Wc/+1k+\n+9nP1n29zK+zvcNaqk1wwtdbb72V++67Lx988EE+9alPZWRkJEuXLs3Q0FC+/e1v5wtf+EIqlUq+\n853v5Kc//WmSZGhoKGvXrm3wypmNWvb5T//0T/Nf//VfJ71h5O///u+zbNmyBq6c2ahln/+3xx9/\nPFNTU7n33nsbtGJORy37PDMzk5GRkWzdujWtra259tprc++996a19Zx/LeicUcs+79mzJxs2bMh7\n772XSqWSL33pS/nbv/3btLfsxDSRAAAAVElEQVS3N3r51OiRRx7Jyy+/nPfeey8XXXRRLrzwwvzo\nRz/6RHVYUwQzAACcLr+GAwBAgWAGAIACwQwAAAWCGQAACgQzAAAUCGYAACgQzAAAUPB/AYI4tsTv\nOwLOAAAAAElFTkSuQmCC\n", 341 | "text/plain": [ 342 | "
" 343 | ] 344 | }, 345 | "metadata": { 346 | "tags": [] 347 | } 348 | } 349 | ] 350 | }, 351 | { 352 | "cell_type": "markdown", 353 | "metadata": { 354 | "id": "AdvPFicghiVP", 355 | "colab_type": "text" 356 | }, 357 | "source": [ 358 | "### Poder\n", 359 | "\n", 360 | "Definimos o poder de um teste como a probabilidade de rejeitarmos $H_{0}$ quando $H_{0}$ é realmente falsa. Em outras palavras, o poder é a probabilidade de não cometermos um Erro Tipo II:\n", 361 | "\n", 362 | "$$\\text{Poder} = \\pi(\\mu) = P(\\text{rejeitar } H_{0} | H_{0} \\text{ falsa}) = 1 - \\beta$$\n", 363 | "\n", 364 | "O poder é bastante influenciado pelo tamanho da amostra, então cuidado com interpretações sobre ele." 365 | ] 366 | }, 367 | { 368 | "cell_type": "markdown", 369 | "metadata": { 370 | "id": "uJWHMRWjOGfQ", 371 | "colab_type": "text" 372 | }, 373 | "source": [ 374 | "## _Q-Q plot_\n", 375 | "\n", 376 | "O _q-q plot_ é um gráfico para comparação de distribuições de probabilidades. Geralmente, uma das distribuições é teórica e com distribuição bem conhecida. Essa distribuição teórica é convencionalmente posta no eixo x. No eixo y, colocamos os quantis da nossa distribuição amostral, que gostaríamos de comparar com a teórica.\n", 377 | "\n", 378 | "![qq-plot](https://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Normal_normal_qq.svg/686px-Normal_normal_qq.svg.png)\n", 379 | "\n", 380 | "Para o caso mais comum onde em y temos a amostra e em x temos a distribuição teórica com a qual queremos comparar, podemos pensar da seguinte forma:\n", 381 | "\n", 382 | "Sendo a amostra $S = \\{s_{1}, s_{2}, \\dots, s_{n}\\}$, um ponto $(x, y)$ de um _q-q plot_ é tal que:\n", 383 | "\n", 384 | "$$\n", 385 | "\\begin{cases}\n", 386 | " x = F^{-1}(G(s)) \\\\\n", 387 | " y = s\n", 388 | "\\end{cases}\n", 389 | "$$\n", 390 | "\n", 391 | "sendo $F^{-1}$ a função quantil (inversa da CDF) da distribuição teórica, $G$ a CDF empírica da amostra e $s = s_{1}, s_{2}, \\dots, s_{n}$.\n", 392 | "\n", 393 | "De qualquer forma, a cada ponto $(x_{i}, y_{i})$ do _q-q plot_ vale a relação $F(x_{i}) = G(y_{i})$.\n", 394 | "\n", 395 | "Se as duas distribuições a serem comparadas são de amostras, o raciocínio permanece muito parecido." 396 | ] 397 | }, 398 | { 399 | "cell_type": "markdown", 400 | "metadata": { 401 | "id": "utv4UirwXWjS", 402 | "colab_type": "text" 403 | }, 404 | "source": [ 405 | "Se as duas distribuições forem iguais, ou seja, $F = G$, então os pontos ficarão em cima da reta $y = x$ (inclinada 45º). Quanto mais alinhados os pontos estiverem em cima dessa reta, mais a distribuição da amostra se aproxima da distribuição teórica. Se os pontos ficarem em cima de uma outra reta, mas alinhados, pode ser que as distribuições estejam somente fora de escala. Nesse caso, pode ser interessante transformar uma das distribuições, por exemplo, padronizando a amostra (para ter média 0 e variância 1).\n", 406 | "\n", 407 | "O _q-q plot_ é uma boa forma gráfica de sabermos se as duas distribuições são iguais ou parecidas. A sua intuição é também utilizada em alguns testes de hipóteses para aderência à distribuições teóricas como o teste de normalidade de Jarque-Bera." 408 | ] 409 | }, 410 | { 411 | "cell_type": "markdown", 412 | "metadata": { 413 | "id": "6LS4avxFK02T", 414 | "colab_type": "text" 415 | }, 416 | "source": [ 417 | "__Q-Q plot para dados normais__:" 418 | ] 419 | }, 420 | { 421 | "cell_type": "code", 422 | "metadata": { 423 | "id": "JZq5F2apKXeC", 424 | "colab_type": "code", 425 | "outputId": "be32059e-b508-4475-d913-6d3f45012856", 426 | "colab": { 427 | "base_uri": "https://localhost:8080/", 428 | "height": 508 429 | } 430 | }, 431 | "source": [ 432 | "normal_data = sct.norm.rvs(loc=10, scale=4, size=1000)\n", 433 | "\n", 434 | "sm.qqplot(normal_data, fit=True, line=\"45\");" 435 | ], 436 | "execution_count": 0, 437 | "outputs": [ 438 | { 439 | "output_type": "display_data", 440 | "data": { 441 | "image/png": "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\n27NmzVKnTp14R/wzHDt2TO3atZMknTp1SocOHaq5jfrLyMjQs88+qwULFighIcHoOGjmoqKi1KFD\nB61du1YjRozQ2rVr1aFDB6aToMn429/+pi+++EKvvfaafH19jY7j0UpLS1VcXFzzhvqjjz5SWFiY\nwsPDDU7WOLhKiRtRuH++hx56SMeOHZOPj48sFot+9atfafDgwUbH8lg9evSQ1Wo9p9CkpaU1i6ML\n7rB27Vq98MILKi4ultVqVUBAgObPn8+bwno4fvy4Zs2apeLiYoWGhur555/XVVddZXQsj/X0009r\n06ZNys3NVUREhMLDw7Vu3TqjY3mkr776SkOHDlWbNm3k7+8vSUpISNArr7xicDLPlJubq+nTp6u8\nvFxms1lhYWF67LHH1LFjR6OjNQoKNwAAAOBGTEYCAAAA3IjCDQAAALgRhRsAAABwIwo3AAAA4EYU\nbgAAAMCNKNwAcAEvv/yyHn74YaNj1CozM1Ndu3aVw+H4Wdu566679M477zRQKvf705/+VHNZtl27\ndqlPnz4GJwKAS2PhGwDNVteuXWs+Li8vl6+vb81y7XPmzDEqVq2Sk5P19NNPq1evXpKk+Ph47d27\n1+37PXbsmP76179q9+7dcjqduu666/S73/1OXbp0cfu+V6xYoXfeeUfLli2rue/JJ590+34BoKFx\nhBtAs7V3796af/Hx8Xr11Vdrbg8fPrzRclRXVzfavurj22+/1YQJE5SYmKgPP/xQ27ZtU//+/TVl\nyhTt37/f6HgA4DEo3ABwEVVVVXr00UfVtWtXDRkyRAcOHKh5zGaz6cEHH1SPHj2UnJyshQsX1jxW\nWVmpuXPnqnfv3urdu7fmzp2ryspKSf83FeK1117TzTffrNmzZ0uSMjIyNGLECCUlJWn8+PE6fPiw\nJOmRRx5RZmam7r//fnXt2lWvv/66vvvuOyUmJtaU9cLCQs2ePVu9e/dWt27dNH36dElSUVGR7rvv\nPvXo0UPdunXTfffdp6ysrDo995dfflldunTRb3/7W4WHhys4OFiTJk3S8OHD9Ze//OWc53K25ORk\nbd++XZK0f/9+paamKikpSb1799aTTz5ZMw6SlJiYqGXLlmnAgAFKSkrSnDlz5HK5dPz4cT3xxBPa\nt2+funbtqqSkJEk/rOD70ksv1Zr3Yq/H/v37NXr0aN1www3q1auXnn322TqNAQA0BAo3AFzERx99\npCFDhmjPnj1KTk7WU089JUlyOp2aNm2aEhMT9fHHHys9PV3p6enatm2bJGnevHn6/PPPtWrVKq1e\nvVoHDhzQv/71r5rt5ubmqqioSBkZGXrqqad08OBB/eEPf9CTTz6pXbt2KTU1VdOnT1dlZaX+8pe/\nnHMEfurUqeflfPTRR1VeXq5169Zp+/btuvvuu2tyjh49WhkZGcrIyJCfn1+dp2Vs375dgwYNOu/+\nlJQUffrpp7Lb7Zfchtls1uzZs7Vz5069+eab2rFjh5YuXXrO52zZskXLly/X6tWrtWHDBm3btk1t\n27bVnDlz1KVLF+3du1d79uy56H4u9XrMnTtXkyZN0meffaYPPvhAKSkpdRoDAGgIFG4AuIgbb7xR\nffv2lcVi0YgRI2qOOh84cED5+fmaMWOGfH191bp1a40bN07r16+XJK1Zs0YPPPCAoqKiFBkZqQce\neECrV6+u2a7ZbNbMmTPl6+srf39/vfXWW0pNTdX1118vi8WiUaNGyWq1at++fZfMmJ2drY8//lhz\n5sxRWFiYrFarbrrpJklSRESEBg4cqICAAAUHB2vatGnavXt3nZ57QUGBYmJizrs/JiZGDodDhYWF\nl9xGp06d1KVLF/n4+CghIUGpqann7X/q1KkKDQ1VfHy8unfvXjPG9XGp18PHx0fffvut8vPzFRQU\n1Chz0AHgR5w0CQAXER0dXfOxv7+/7Ha7qqur9f333ys7O7tmqoMkORyOmtvZ2dmKj4+veSw+Pl7Z\n2dk1tyMiIuTn51dzOzMzU++9954WL15cc19VVdU5X3MhWVlZCgsLU1hY2HmPlZeX69lnn9W2bdtU\nVFQkSSotLZXD4ag5QfRCIiIilJOTc979OTk5MplMioiI0MmTJy+6jRMnTui5557TF198ofLycjkc\nDnXs2PGczzm71AcEBKi0tPSi26zNpV6PuXPn6h//+IdSUlKUkJCgGTNmqF+/fvXeDwBcDgo3AFyG\nli1bKiEhQZs2bar18djYWGVmZqp9+/aSpNOnTys2NrbmcZPJdN727r//fk2bNq3eWeLi4lRUVKTi\n4mKFhoae89j8+fN14sQJvf3224qJidGhQ4c0cuRIuVyuS263Z8+e2rhxo8aMGXPO/Rs2bFCXLl3k\n6+urgIAAVVRU1DzmcDiUn59fc/vPf/6zrr32Wr344osKDg5WWlqa3n///To9r5+O0cVc6vVo06aN\n/va3v8npdGrTpk2aOXOmdu3apcDAwDrvAwAuF1NKAOAydO7cWUFBQXrttddUUVEhh8Oho0eP1ly9\nY8iQIZo3b57y8/OVn5+vV155RcOGDbvg9saOHas333xTn3/+uVwul8rKyrRlyxaVlJRI+uFI+6lT\np2r92tjYWPXpQQZtagAAAgFJREFU00dz5sxRUVGRqqqqaqZtlJaWys/PT6GhoSosLNQ///nPOj/H\nGTNmaO/evXrppZdUWFiokpISLVq0SCtWrNDMmTMlSVdeeaXsdru2bNmiqqoqzZs375yTIktLSxUU\nFKSgoCAdP378nEv8XUpUVJRsNts527uQS70eq1atUn5+vsxmc82bErOZX4EAGgc/bQDgMlgsFr36\n6qs6fPiwbrvtNvXo0UOPP/54TUGePn26OnXqpOHDh2v48OHq2LFjzZVDanPdddfpqaee0pNPPqlu\n3bppwIABWrFiRc3jv/71rzVv3jwlJSXpjTfeOO/rX3jhBfn4+CglJUW9evVSenq6JGny5Mmy2+3q\n0aOHUlNTdcstt9T5ObZp00ZLly7V4cOHlZycrG7duunvf/+7/vnPf9ZcDzwkJERPPPGEHn/8cfXp\n00cBAQGKi4ur2cZjjz2mtWvX6oYbbtD//M//aPDgwXXef48ePdSuXTv17t1b3bt3v+jnXur12LZt\nm4YMGaKuXbtq7ty5eumll+Tv71/nLADwc5hcdfm7IgCg2cvKytK4ceP04IMPauzYsUbHAQCPwRFu\nAECdxMXF6fXXX1dOTs5lndgIAM0VR7gBAAAAN+IINwAAAOBGFG4AAADAjSjcAAAAgBtRuAEAAAA3\nonADAAAAbkThBgAAANzofwHSgh7pH5SGNgAAAABJRU5ErkJggg==\n", 442 | "text/plain": [ 443 | "
" 444 | ] 445 | }, 446 | "metadata": { 447 | "tags": [] 448 | } 449 | } 450 | ] 451 | }, 452 | { 453 | "cell_type": "markdown", 454 | "metadata": { 455 | "id": "xp0bvdpfLJF3", 456 | "colab_type": "text" 457 | }, 458 | "source": [ 459 | "__Q-Q plot para dados não normais__:" 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "metadata": { 465 | "id": "scSaAzuqLMhH", 466 | "colab_type": "code", 467 | "outputId": "f9f8d593-b171-4cb2-9d21-8b08448d94de", 468 | "colab": { 469 | "base_uri": "https://localhost:8080/", 470 | "height": 508 471 | } 472 | }, 473 | "source": [ 474 | "non_normal_data = sct.expon.rvs(size=1000)\n", 475 | "\n", 476 | "sm.qqplot(non_normal_data, fit=True, line=\"45\");" 477 | ], 478 | "execution_count": 0, 479 | "outputs": [ 480 | { 481 | "output_type": "display_data", 482 | "data": { 483 | "image/png": "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\nrOcsAAAAAP6n6V4GBgAAAC4BCjcAAADQgCjcAAAAQAOicAMAAAANiMINAAAANCAKNwAAANCAKNwA\nAABAA6JwAwAAAA2Iwg0AAAA0IAo3AAAA0IAo3I3QtGnTdPPNNyspKUkjR47Uvn37jI6Eahw9elTJ\nyckaMGCAkpOTdezYMaMjoRZ5eXkaP368BgwYoCFDhmjSpEnKzc01OhbqYO7cuWrbtq2+/fZbo6Pg\nHMrKyvTss8+qf//+GjJkiJ555hmjI+Ec0tLSdOutt2ro0KFKSkrSpk2bjI7kkkxOp9NpdAjUr7S0\nNPXq1Uuenp5KS0vTzJkztWXLFqNj4VfGjBmjESNGaOjQoVqzZo3eeecdLVq0yOhYqEF+fr6++eYb\ndevWTZI0e/ZsFRQU6C9/+YvByVCbAwcOaM6cOTpy5Ijmz5+vq666yuhIqMXzzz8vs9msqVOnymQy\nKTs7WxEREUbHQg2cTqeuu+46LV26VFdddZUOHz6sUaNGaffu3TKbuaZ7Or4ajVDfvn3l6ekpSYqP\nj1dmZqYcDofBqXC6nJwcHTx4UIMHD5YkDR48WAcPHuSKqQsLCQmpKtvSf3+2MjIyDEyEcykvL9f0\n6dP13HPPGR0FdVBcXKx3331XDz/8sEwmkyRRtt2A2WxWYWGhJKmwsFBRUVGU7Wp4GB0ADWvp0qW6\n8cYb+eZ3MSdOnFCzZs1ksVgkSRaLRVFRUTpx4oTCwsIMTodzcTgcWr58uRITE42Oglq89NJLSkpK\nUlxcnNFRUAfHjx9XSEiI5s6dq507d8rf318PP/ywunTpYnQ01MBkMumf//ynJk6cKD8/PxUXF+u1\n114zOpZLonC7oWHDhtV4ZW379u1VJW7Dhg1at26dli5deinjAY3ejBkz5Ofnp7vuusvoKKjBnj17\ntH//fv3xj380OgrqyG636/jx42rfvr2efPJJff3115owYYI2b96sgIAAo+OhGpWVlfr3v/+tV199\nVZ07d9bu3bv1yCOPaMOGDfL39zc6nkuhcLuh1atXn3OfzZs3a86cOUpJSeFXci4oJiZGVqtVdrtd\nFotFdrtdNptNMTExRkfDOcyePVs//PCD5s+fz2+OXNiuXbuUnp6um266SZKUmZmpe++9V7NmzVKv\nXr0MTofqxMTEyMPDo2qq3TXXXKPQ0FAdPXpUnTp1MjgdqnPo0CHZbDZ17txZktS5c2f5+voqPT1d\nV199tcHpXAt/WjRCaWlpmjVrlt544w1+leqiwsPD1a5dO61fv16StH79erVr147pJC7uxRdf1P79\n+/XKK6/Iy8vL6DioxX333adPP/1UH330kT766CNFR0frjTfeoGy7sLCwMHXr1k3/+c9/JP13Jaec\nnBy1atXK4GSoSXR0tDIzM3XkyBFJUnp6unJyctSyZUuDk7keVilphLp37y5PT88zyltKSopCQ0MN\nTIVfS09P15QpU3Ty5EkFBQVp9uzZuvzyy42OhRp89913Gjx4sFq3bi0fHx9JUlxcnF555RWDk6Eu\nEhMTWaXEDRw/flxPPfWU8vPz5eHhoUceeUR9+vQxOhZqsXbtWr3++utVb3SdPHmy+vXrZ3Aq10Ph\nBgAAABoQU0oAAACABkThBgAAABoQhRsAAABoQBRuAAAAoAFRuAEAAIAGROEGgBq8/PLLLnunwoyM\nDCUkJMhut1/UcUaPHq0VK1bUU6qG9+c//7lqKcadO3eqd+/eBicCgHPjTpMAmqyEhISqj0tKSuTl\n5SWLxSJJmjZtmlGxqpWYmKjnn39ePXv2lCTFxsZqz549DX7e77//Xn//+9+1a9cuORwOderUSY89\n9pji4+Mb/NyrVq3SihUrtHz58qrHpk+f3uDnBYD6xhVuAE3Wnj17qv6JjY3V/Pnzqz5PSkq6ZDkq\nKysv2bnOx48//qhRo0apbdu2+vDDD7Vt2zb169dPd999t/bu3Wt0PABwGxRuAKhFRUWFnnjiCSUk\nJGjQoEHat29f1Tar1aqHHnpI3bt3V2JiohYtWlS1rby8XDNnzlSvXr3Uq1cvzZw5U+Xl5ZL+/1SI\n1157Tddff72mTp0qSUpLS9PQoUPVpUsXjRw5UocPH5YkPf7448rIyNCECROUkJCg119/XT/99JPa\ntm1bVdbz8/M1depU9erVS127dtXEiRMlSQUFBbr//vvVvXt3de3aVffff78yMzPr9NpffvllxcfH\n69FHH1VISIgCAgI0ZswYJSUl6YUXXjjjtZwuMTFR27dvlyTt3btXycnJ6tKli3r16qXp06dXfR0k\nqW3btlq+fLn69++vLl26aNq0aXI6nUpPT9ezzz6rr776SgkJCerSpYskacqUKZozZ061eWsbj717\n92r48OG69tpr1bNnT82aNatOXwMAqA8UbgCoxUcffaRBgwbpiy++UGJiombMmCFJcjgceuCBB9S2\nbVt98sknSk1NVWpqqrZt2yZJmjdvnr7++mutWbNGa9eu1b59+/Tqq69WHTc7O1sFBQVKS0vTjBkz\ndPDgQT311FOaPn26du7cqeTkZE2cOFHl5eV64YUXzrgCP378+LNyPvHEEyopKdGGDRu0fft2jRs3\nrirn8OHDlZaWprS0NHl7e9d5Wsb27dt18803n/X4wIEDtXv3bpWVlZ3zGGazWVOnTtVnn32mN998\nUzt27NCyZcvO2Gfr1q1auXKl1q5dq40bN2rbtm1q06aNpk2bpvj4eO3Zs0dffPFFrec513jMnDlT\nY8aM0ZdffqnNmzdr4MCBdfoaAEB9oHADQC06d+6sPn36yGKxaOjQoVVXnfft26fc3FxNmjRJXl5e\natGihe644w699957kqR169bpwQcfVHh4uMLCwvTggw9q7dq1Vcc1m82aPHmyvLy85OPjo7feekvJ\nycm65pprZLFYNGzYMHl6euqrr746Z0abzaZPPvlE06ZNU3BwsDw9PXXddddJkkJDQzVgwAD5+voq\nICBADzzwgHbt2lWn156Xl6fIyMizHo+MjJTdbld+fv45j9GxY0fFx8fLw8NDcXFxSk5OPuv848eP\nV1BQkGJjY9WtW7eqr/H5ONd4eHh46Mcff1Rubq78/f0vyRx0APgFb5oEgFpERERUfezj46OysjJV\nVlbq559/ls1mq5rqIEl2u73qc5vNptjY2KptsbGxstlsVZ+HhobK29u76vOMjAy9++67WrJkSdVj\nFRUVZzynJpmZmQoODlZwcPBZ20pKSjRr1ixt27ZNBQUFkqTi4mLZ7faqN4jWJDQ0VFlZWWc9npWV\nJZPJpNDQUB07dqzWYxw9elR//etftX//fpWUlMhut6tDhw5n7HN6qff19VVxcXGtx6zOucZj5syZ\n+te//qWBAwcqLi5OkyZNUt++fc/7PABwISjcAHABYmJiFBcXp02bNlW7PSoqShkZGbryyislSSdO\nnFBUVFTVdpPJdNbxJkyYoAceeOC8s0RHR6ugoEAnT55UUFDQGdsWLFigo0eP6u2331ZkZKQOHTqk\nW2+9VU6n85zH7dGjh95//32NGDHijMc3btyo+Ph4eXl5ydfXV6WlpVXb7Ha7cnNzqz5/7rnn1L59\ne/3jH/9QQECAUlJS9MEHH9Tpdf36a1Sbc41H69at9eKLL8rhcGjTpk2aPHmydu7cKT8/vzqfAwAu\nFFNKAOACXH311fL399drr72m0tJS2e12ffvtt1WrdwwaNEjz5s1Tbm6ucnNz9corr2jIkCE1Hu/2\n22/Xm2++qa+//lpOp1OnTp3S1q1bVVRUJOm/V9qPHz9e7XOjoqLUu3dvTZs2TQUFBaqoqKiatlFc\nXCxvb28FBQUpPz9fc+fOrfNrnDRpkvbs2aM5c+YoPz9fRUVFWrx4sVatWqXJkydLki677DKVlZVp\n69atqqio0Lx58854U2RxcbH8/f3l7++v9PT0M5b4O5fw8HBZrdYzjleTc43HmjVrlJubK7PZXPWX\nErOZPwIBXBr83wYALoDFYtH8+fN1+PBh3XTTTerevbuefvrpqoI8ceJEdezYUUlJSUpKSlKHDh2q\nVg6pTqdOnTRjxgxNnz5dXbt2Vf/+/bVq1aqq7ffdd5/mzZunLl266I033jjr+X/729/k4eGhgQMH\nqmfPnkpNTZUkjR07VmVlZerevbuSk5N1ww031Pk1tm7dWsuWLdPhw4eVmJiorl276qWXXtLcuXOr\n1gMPDAzUs88+q6efflq9e/eWr6+voqOjq47x5JNPav369br22mv1zDPP6JZbbqnz+bt3764rrrhC\nvXr1Urdu3Wrd91zjsW3bNg0aNEgJCQmaOXOm5syZIx8fnzpnAYCLYXLW5feKAIAmLzMzU3fccYce\neugh3X777UbHAQC3wRVuAECdREdH6/XXX1dWVtYFvbERAJoqrnADAAAADYgr3AAAAEADonADAAAA\nDYjCDQAAADQgCjcAAADQgCjcAAAAQAOicAMAAAAN6P8BkL0l+rshVosAAAAASUVORK5CYII=\n", 484 | "text/plain": [ 485 | "
" 486 | ] 487 | }, 488 | "metadata": { 489 | "tags": [] 490 | } 491 | } 492 | ] 493 | }, 494 | { 495 | "cell_type": "markdown", 496 | "metadata": { 497 | "id": "-6mP3jQoZK0z", 498 | "colab_type": "text" 499 | }, 500 | "source": [ 501 | "## Testes de hipóteses clássicos\n", 502 | "\n", 503 | "Diversos testes de hipóteses para uma gama de tarefas já foram desenvolvidos pela comunidade estatística. Por ora, nosso trabalho é somente entender e saber aplicar os mais usuais. A teoria formal sobre a construção de TH pode ser encontrada facilmente em qualquer literatura sobre inferência estatística.\n", 504 | "\n", 505 | "Dois tipos bem comuns de TH são os testes de comparação e os testes de aderência (_goodness-of-fit_). Veremos aqui dois testes para comparação de médias e dois testes de normalidade: Shapiro-Wilk e Jarque-Bera.\n", 506 | "\n", 507 | "Antes de prosseguirmos, um aviso por Neyman e Pearson:\n", 508 | "\n", 509 | "> _Statistical tests should be used with discretion and understanding, and not as instruments which themeselves give the final verdict_." 510 | ] 511 | }, 512 | { 513 | "cell_type": "markdown", 514 | "metadata": { 515 | "id": "Bs8KSKJsg2zE", 516 | "colab_type": "text" 517 | }, 518 | "source": [ 519 | "### Teste de média de uma amostra\n", 520 | "\n", 521 | "O teste de hipóteses mais conhecido certamente é sobre a média de uma amostra: o famoso teste-$t$ da média.\n", 522 | "\n", 523 | "Nosso objetivo com esse teste é avaliar se uma dada amostra $S$ foi coletada de uma distribuição cuja média $\\mu$ é igual a $\\mu_{0}$.\n", 524 | "\n", 525 | "Podemos formular nossas hipóteses da seguinte forma:\n", 526 | "\n", 527 | "$$\n", 528 | "\\begin{cases}\n", 529 | " H_{0}: \\mu = \\mu_{0} \\\\\n", 530 | " H_{1}: \\mu \\neq \\mu_{0}\n", 531 | "\\end{cases}\n", 532 | "$$\n", 533 | "\n", 534 | "Partimos de uma suposição inicial: nossa distribuição original é normal sob $H_{0}$ (depois veremos que é possível relaxar isso).\n", 535 | "\n", 536 | "A partir dessa suposição, podemos afimar que nossa média amostral $\\bar{X}$ também tem distribuição simétrica de média $\\mu_{0}$ e desvio-padrão $s/\\sqrt{n}$, chamado erro-padrão.\n", 537 | "\n", 538 | "Para construir nossa estatística de teste $t$, fazemos:\n", 539 | "\n", 540 | "$$t = \\frac{\\bar{x} - \\mu_{0}}{s/\\sqrt{n}}$$\n", 541 | "\n", 542 | "onde $\\bar{x}$ é a média obtida a partir da amostra, $s$ é o desvio-padrão calculado a partir da amostra e $n$ é o tamanho da amostra.\n", 543 | "\n", 544 | "Essa estatística $t$ tem distribuição $t$-Student com $n-1$ graus de liberdade, que é bem próxima da distribuição normal. Ela é utilizada em vez da normal, pois suas caudas mais pesadas compensam a aproximação feita de $s$ para o desvio padrão.\n", 545 | "\n", 546 | "Como sempre devemos estabelecer _a priori_ o valor de $\\alpha$, nosso nível de significância, a fim de compararmos com valor numérico obtido de $t$. Se $t$ cair na região de aceitação (que depende de $\\alpha$), então não rejeitamos a hipótese de que a verdadeira média é $\\mu_{0}$. Do contrário, podemos dizer que temos evidências o suficiente para rejeitar tal hipótese, e portanto $\\mu$ não deve ser igual a $\\mu_{0}$.\n", 547 | "\n", 548 | "Para relaxar a suposição de distribuição normal dos dados, apelamos para o Teorema Central do Limite (TCL) que nos afirma que:\n", 549 | "\n", 550 | "$$\\bar{X} \\xrightarrow{d} N(\\mu, \\frac{\\sigma^{2}}{n})$$\n", 551 | "\n", 552 | "quando $n \\rightarrow \\infty$.\n", 553 | "\n", 554 | "Ou seja, se tivermos uma amostra grande o suficiente, podemos usar o TCL para justificar os cálculos anteriores, incluindo a fórmula da estatística de teste $t$, sem precisar presumir normalidade dos dados.\n", 555 | "\n", 556 | "Para isso, sob $H_{0}$, substituímos $\\mu$ por $\\mu_{0}$ e estimamos $\\sigma$ como $s$ (desvio-padrão amostral), chegando à mesma fórmula de $t$. Além disso, a distribuição $t$-Student se aproxima de uma distribuição normal quando $n \\rightarrow \\infty$." 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "metadata": { 562 | "id": "c20v0EEuMsdl", 563 | "colab_type": "code", 564 | "outputId": "d2c9298e-5676-4409-f887-642bcc5dcd9f", 565 | "colab": { 566 | "base_uri": "https://localhost:8080/", 567 | "height": 34 568 | } 569 | }, 570 | "source": [ 571 | "data = sct.expon.rvs(scale=10, size=1000) # Mean = scale = 1/lambda = 10.\n", 572 | "\n", 573 | "sct.ttest_1samp(data, popmean=10) # Deveria não rejeitar H_0." 574 | ], 575 | "execution_count": 0, 576 | "outputs": [ 577 | { 578 | "output_type": "execute_result", 579 | "data": { 580 | "text/plain": [ 581 | "Ttest_1sampResult(statistic=1.2949988347576746, pvalue=0.195619830815884)" 582 | ] 583 | }, 584 | "metadata": { 585 | "tags": [] 586 | }, 587 | "execution_count": 7 588 | } 589 | ] 590 | }, 591 | { 592 | "cell_type": "code", 593 | "metadata": { 594 | "id": "ln4Z3Iy3OlpI", 595 | "colab_type": "code", 596 | "outputId": "6f01f421-3ba0-460a-e197-30bdba035b6e", 597 | "colab": { 598 | "base_uri": "https://localhost:8080/", 599 | "height": 34 600 | } 601 | }, 602 | "source": [ 603 | "data = sct.expon.rvs(scale=8, size=1000) # Mean = scale = 1/lambda = 8.\n", 604 | "\n", 605 | "sct.ttest_1samp(data, popmean=10) # Deveria rejeitar H_0." 606 | ], 607 | "execution_count": 0, 608 | "outputs": [ 609 | { 610 | "output_type": "execute_result", 611 | "data": { 612 | "text/plain": [ 613 | "Ttest_1sampResult(statistic=-6.36995838442348, pvalue=2.8802880697624707e-10)" 614 | ] 615 | }, 616 | "metadata": { 617 | "tags": [] 618 | }, 619 | "execution_count": 8 620 | } 621 | ] 622 | }, 623 | { 624 | "cell_type": "markdown", 625 | "metadata": { 626 | "id": "x_fccwEBlvHZ", 627 | "colab_type": "text" 628 | }, 629 | "source": [ 630 | "### Teste de comparação das médias de duas amostras\n", 631 | "\n", 632 | "Outro cenário bastante comum é querermos comparar as médias de duas amostras diferentes para descobrirmos se as duas amostras vêm de distribuições de mesma média.\n", 633 | "\n", 634 | "Entendido o teste anterior, o racional do presente teste é bem direto: usamos a diferença entre as duas médias amostrais e os respectivos desvios-padrão no cálculo da estatística de teste $t$. Ou seja,\n", 635 | "\n", 636 | "$$t = \\frac{\\bar{x}_{1} - \\bar{x}_{2}}{\\sqrt{s_{1}^{2} + s_{2}^{2}}}$$\n", 637 | "\n", 638 | "onde $\\bar{x}_{1}$ e $\\bar{x}_{2}$ são as médias da primeira e segunda amostras e $s_{1}$ e $s_{2}$ são os desvios-padrão das duas amostras.\n", 639 | "\n", 640 | "Sob $H_{0}$, é possível mostrar que $t$ tem distribuição $t$-Student com $n_{1} + n_{2} - 2$ graus de liberdade, onde $n_{1}$ e $n_{2}$ são os tamanhos das amostras.\n", 641 | "\n", 642 | "A interpretação do resultado de $t$ com relação ao nível de significância e consequente rejeição (ou não) de $H_{0}$ é análoga ao teste anterior." 643 | ] 644 | }, 645 | { 646 | "cell_type": "code", 647 | "metadata": { 648 | "id": "fr4Y2bzdMLVD", 649 | "colab_type": "code", 650 | "outputId": "aa85e2b2-3ba8-4561-90ad-36a97f046417", 651 | "colab": { 652 | "base_uri": "https://localhost:8080/", 653 | "height": 34 654 | } 655 | }, 656 | "source": [ 657 | "data_one = sct.expon.rvs(scale=8, size=100) # Mesmas distribuições.\n", 658 | "data_two = sct.expon.rvs(scale=8, size=100)\n", 659 | "\n", 660 | "sct.ttest_ind(data_one, data_two) # Não deveria rejeitar H_0." 661 | ], 662 | "execution_count": 0, 663 | "outputs": [ 664 | { 665 | "output_type": "execute_result", 666 | "data": { 667 | "text/plain": [ 668 | "Ttest_indResult(statistic=-0.4013239204454533, pvalue=0.6886144437899671)" 669 | ] 670 | }, 671 | "metadata": { 672 | "tags": [] 673 | }, 674 | "execution_count": 9 675 | } 676 | ] 677 | }, 678 | { 679 | "cell_type": "code", 680 | "metadata": { 681 | "id": "ejx3ybHxPU7w", 682 | "colab_type": "code", 683 | "outputId": "002b27e6-bc86-4fba-8b4b-8cf9d8ab2566", 684 | "colab": { 685 | "base_uri": "https://localhost:8080/", 686 | "height": 34 687 | } 688 | }, 689 | "source": [ 690 | "data_one = sct.expon.rvs(scale=8, size=100) # Distribuições diferentes.\n", 691 | "data_two = sct.expon.rvs(scale=12, size=100)\n", 692 | "\n", 693 | "sct.ttest_ind(data_one, data_two) # Deveria rejeitar H_0." 694 | ], 695 | "execution_count": 0, 696 | "outputs": [ 697 | { 698 | "output_type": "execute_result", 699 | "data": { 700 | "text/plain": [ 701 | "Ttest_indResult(statistic=-3.3561806148745723, pvalue=0.0009473671502942383)" 702 | ] 703 | }, 704 | "metadata": { 705 | "tags": [] 706 | }, 707 | "execution_count": 17 708 | } 709 | ] 710 | }, 711 | { 712 | "cell_type": "markdown", 713 | "metadata": { 714 | "id": "C2Xf3GlJsDbp", 715 | "colab_type": "text" 716 | }, 717 | "source": [ 718 | "### Shapiro-Wilk\n", 719 | "\n", 720 | "O teste de Shapiro-Wilk é um teste de aderência à distribuição normal, que abreviamos para teste de normalidade. Nosso intuito é verificar se uma dada amostra veio ou não de uma distribuição normal.\n", 721 | "\n", 722 | "Não precisamos e não entraremos nos detalhes da sua estatística de teste. Tudo que precisamos saber por ora é:\n", 723 | "\n", 724 | "* A hipótese nula, $H_{0}$, é a normalidade dos dados.\n", 725 | " * Se o valor-p for menor que o nível de significância $\\alpha$, então temos evidências de que os dados não vêm de uma distribuição normal.\n", 726 | " * Se o valor-p for maior que $\\alpha$, então não podemos afimar que os dados não vêm de uma distribuição normal (o que é sutilmente diferente de afirmar que eles _vêm_ de uma distribuição normal. Cuidado!).\n", 727 | "* Apesar de ter tendência a melhores resultados quanto maior a amostra, a maior parte das implementações não suporta computações com amostras muito grandes.\n", 728 | " * A implementação do SciPy por exemplo só suporta até 5000 observações.\n", 729 | "* É altamente aconselhado fazer o teste em conjunto com uma análise gráfica de um _q-q plot_." 730 | ] 731 | }, 732 | { 733 | "cell_type": "code", 734 | "metadata": { 735 | "id": "EG-ltCuQPc1W", 736 | "colab_type": "code", 737 | "outputId": "32ec836d-404e-4b98-cc65-459add84f44d", 738 | "colab": { 739 | "base_uri": "https://localhost:8080/", 740 | "height": 34 741 | } 742 | }, 743 | "source": [ 744 | "normal_data = sct.norm.rvs(loc=10, scale=4, size=100)\n", 745 | "\n", 746 | "sct.shapiro(normal_data)" 747 | ], 748 | "execution_count": 0, 749 | "outputs": [ 750 | { 751 | "output_type": "execute_result", 752 | "data": { 753 | "text/plain": [ 754 | "(0.9900335669517517, 0.6673061847686768)" 755 | ] 756 | }, 757 | "metadata": { 758 | "tags": [] 759 | }, 760 | "execution_count": 11 761 | } 762 | ] 763 | }, 764 | { 765 | "cell_type": "code", 766 | "metadata": { 767 | "id": "8tvWUYX4Przx", 768 | "colab_type": "code", 769 | "outputId": "83e01ed0-78b9-420b-8572-7d37db3026b3", 770 | "colab": { 771 | "base_uri": "https://localhost:8080/", 772 | "height": 34 773 | } 774 | }, 775 | "source": [ 776 | "normal_data = sct.expon.rvs(scale=4, size=100)\n", 777 | "\n", 778 | "sct.shapiro(normal_data)" 779 | ], 780 | "execution_count": 0, 781 | "outputs": [ 782 | { 783 | "output_type": "execute_result", 784 | "data": { 785 | "text/plain": [ 786 | "(0.861492395401001, 3.229477130162195e-08)" 787 | ] 788 | }, 789 | "metadata": { 790 | "tags": [] 791 | }, 792 | "execution_count": 12 793 | } 794 | ] 795 | }, 796 | { 797 | "cell_type": "markdown", 798 | "metadata": { 799 | "id": "adIEM13XuRlN", 800 | "colab_type": "text" 801 | }, 802 | "source": [ 803 | "### Jarque-Bera\n", 804 | "\n", 805 | "Assim como Shapiro-Wilk, o teste de Jarque-Bera é um teste de aderência à distribuição normal com $H_{0}$ sendo a normalidade dos dados. A diferença reside na estatística de teste utilizada.\n", 806 | "\n", 807 | "A estatística de teste é baseada na assimetria (_skewness_) e curtose (_kurtosis_) excessiva da amostra. Se a amostra vem de uma distribuição normal, então esses valores devem ser muito próximos de zero. Se isso acontecer, então a estatística de teste tem distribuição $\\chi^{2}$ com dois graus de liberdade.\n", 808 | "\n", 809 | "No entanto, se a amostra for pequena, podemos ter muitos falsos negativos (Erro Tipo I) ao utilizarmos a distribuição $\\chi^{2}$, ou seja, rejeitamos $H_{0}$ quando ela é verdadeira.\n", 810 | "\n", 811 | "Para evitar isso, as implementações costumam utilizar aproximações por Monte-Carlo quando $n$ é pequeno, reservando a aproximação $\\chi^{2}$ para amostras grandes.\n", 812 | "\n", 813 | "Novamente, é altamente aconselhado complementar o resultado desse teste com um _q-q plot_." 814 | ] 815 | }, 816 | { 817 | "cell_type": "code", 818 | "metadata": { 819 | "id": "LcUvjC4APy5D", 820 | "colab_type": "code", 821 | "outputId": "117aa7b6-c8c0-475d-ff72-ef93ea386b1d", 822 | "colab": { 823 | "base_uri": "https://localhost:8080/", 824 | "height": 34 825 | } 826 | }, 827 | "source": [ 828 | "normal_data = sct.norm.rvs(loc=10, scale=4, size=100)\n", 829 | "\n", 830 | "sct.jarque_bera(normal_data)" 831 | ], 832 | "execution_count": 0, 833 | "outputs": [ 834 | { 835 | "output_type": "execute_result", 836 | "data": { 837 | "text/plain": [ 838 | "(1.3860798820613607, 0.5000536226398145)" 839 | ] 840 | }, 841 | "metadata": { 842 | "tags": [] 843 | }, 844 | "execution_count": 13 845 | } 846 | ] 847 | }, 848 | { 849 | "cell_type": "code", 850 | "metadata": { 851 | "id": "xzU7eZBqP4Jj", 852 | "colab_type": "code", 853 | "outputId": "da5fbf20-db39-419d-a8cc-118e666be6ca", 854 | "colab": { 855 | "base_uri": "https://localhost:8080/", 856 | "height": 34 857 | } 858 | }, 859 | "source": [ 860 | "normal_data = sct.expon.rvs(scale=4, size=100)\n", 861 | "\n", 862 | "sct.jarque_bera(normal_data)" 863 | ], 864 | "execution_count": 0, 865 | "outputs": [ 866 | { 867 | "output_type": "execute_result", 868 | "data": { 869 | "text/plain": [ 870 | "(108.90291925766803, 0.0)" 871 | ] 872 | }, 873 | "metadata": { 874 | "tags": [] 875 | }, 876 | "execution_count": 14 877 | } 878 | ] 879 | }, 880 | { 881 | "cell_type": "markdown", 882 | "metadata": { 883 | "id": "cDpdgnjvwFD7", 884 | "colab_type": "text" 885 | }, 886 | "source": [ 887 | "## Referências\n", 888 | "\n", 889 | "* [A Gentle Introduction to Statistical Hypothesis Testing](https://machinelearningmastery.com/statistical-hypothesis-tests/)\n", 890 | "\n", 891 | "* [How to Correctly Interpret P Values](https://blog.minitab.com/blog/adventures-in-statistics-2/how-to-correctly-interpret-p-values)\n", 892 | "\n", 893 | "* [A Dirty Dozen: Twelve P-Value Misconceptions](http://www.perfendo.org/docs/BayesProbability/twelvePvaluemisconceptions.pdf)\n", 894 | "\n", 895 | "* [An investigation of the false discovery rate and the misinterpretation of p-values](https://royalsocietypublishing.org/doi/pdf/10.1098/rsos.140216)\n", 896 | "\n", 897 | "* [Statistical tests, P values, confidence intervals, and power: a guide to misinterpretations](https://link.springer.com/content/pdf/10.1007%2Fs10654-016-0149-3.pdf)\n", 898 | "\n", 899 | "* [Why Are P Values Misinterpreted So Frequently?](https://statisticsbyjim.com/hypothesis-testing/p-values-misinterpreted/)\n", 900 | "\n", 901 | "* [Statistical Significance Explained](https://towardsdatascience.com/statistical-significance-hypothesis-testing-the-normal-curve-and-p-values-93274fa32687)\n", 902 | "\n", 903 | "* [Definition of Power](https://newonlinecourses.science.psu.edu/stat414/node/304/)\n", 904 | "\n", 905 | "* [The Math Behind A/B Testing with Example Python Code](https://towardsdatascience.com/the-math-behind-a-b-testing-with-example-code-part-1-of-2-7be752e1d06f)\n", 906 | "\n", 907 | "* [Handy Functions for A/B Testing in Python](https://medium.com/@henryfeng/handy-functions-for-a-b-testing-in-python-f6fdff892a90)" 908 | ] 909 | } 910 | ] 911 | } -------------------------------------------------------------------------------- /aula_8_regressao_linear.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Aula 8 - Regressão linear.ipynb", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "collapsed_sections": [] 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "AGIuOfqgw53f", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "![Codenation](https://forum.codenation.com.br/uploads/default/original/2X/2/2d2d2a9469f0171e7df2c4ee97f70c555e431e76.png)\n", 25 | "\n", 26 | "__Autor__: Kazuki Yokoyama (kazuki.yokoyama@ufrgs.br)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "id": "mi4xZxcfBA2U", 33 | "colab_type": "text" 34 | }, 35 | "source": [ 36 | "# Regressão linear\n", 37 | "\n", 38 | "![cover](https://miro.medium.com/max/1400/1*-hY-dDt5VlCDWeX7nmQfGw.png)\n", 39 | "\n", 40 | "Neste módulo, falaremos de um dos primeiros e mais simples modelos de predição, a regressão linear. Apesar da sua simplicidade, a regressão linear possui grande poder preditivo e ainda é a ferramenta padrão para muitas áreas como, por exemplo, Econometria. Além disso, esses modelos trazem alguns detalhes teóricos que são facilmente esquecidos ou ignorados, mas que devem ter a devida atenção." 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": { 46 | "id": "cAxxSlo3QrZV", 47 | "colab_type": "text" 48 | }, 49 | "source": [ 50 | "## Importação das bibliotecas" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "metadata": { 56 | "id": "jMxYy1NkQwW6", 57 | "colab_type": "code", 58 | "colab": {} 59 | }, 60 | "source": [ 61 | "import functools\n", 62 | "from math import sqrt\n", 63 | "\n", 64 | "import pandas as pd\n", 65 | "import matplotlib.pyplot as plt\n", 66 | "import numpy as np\n", 67 | "import statsmodels.api as sm\n", 68 | "import scipy.stats as sct\n", 69 | "import seaborn as sns\n", 70 | "from sklearn.datasets import load_boston\n", 71 | "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", 72 | "from sklearn.decomposition import PCA\n", 73 | "from sklearn.metrics import mean_squared_error, median_absolute_error, r2_score\n", 74 | "from sklearn.model_selection import train_test_split\n", 75 | "from sklearn.preprocessing import StandardScaler" 76 | ], 77 | "execution_count": 0, 78 | "outputs": [] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "metadata": { 83 | "id": "xNbPRHkKQyv2", 84 | "colab_type": "code", 85 | "colab": {} 86 | }, 87 | "source": [ 88 | "# Algumas configurações para o matplotlib.\n", 89 | "%matplotlib inline\n", 90 | "\n", 91 | "from IPython.core.pylabtools import figsize\n", 92 | "\n", 93 | "\n", 94 | "figsize(12, 12)\n", 95 | "\n", 96 | "sns.set()" 97 | ], 98 | "execution_count": 0, 99 | "outputs": [] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "metadata": { 104 | "id": "m8onCO86Q2Hm", 105 | "colab_type": "code", 106 | "colab": {} 107 | }, 108 | "source": [ 109 | "np.random.seed(1000)" 110 | ], 111 | "execution_count": 0, 112 | "outputs": [] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": { 117 | "id": "gvmMIPBrs5ph", 118 | "colab_type": "text" 119 | }, 120 | "source": [ 121 | "## _Trade-off viés-variância_\n", 122 | "\n", 123 | "Antes de falarmos sobre regressão, vale a pena introduzir o conceito do _trade-off_ viés-variância (_bias-variance trade-off_). O entendimento do _trade-off_ ajuda a compreender algumas decisões que podemos tomar ao escolher e comparar modelos de regressão.\n", 124 | "\n", 125 | "Para avaliar um modelo, podemos observar o quanto esse modelo erra ao fazer predições, de acordo com alguma funções de erro. É possível mostrar que o erro cometido por um modelo sempre pode ser decomposto em três partes: o viés, a variância e um erro irredutível:\n", 126 | "\n", 127 | "$$\\mathbb{E}[(f(x) - \\hat{f}(x))^{2}] = \\underbrace{\\text{Bias}(\\hat{f}(x))^{2}}_{\\text{viés}} + \\underbrace{\\text{Var}[\\hat{f}(x)]}_{\\text{variância}} + \\underbrace{\\varepsilon^{2}}_{\\text{erro irredutível}}$$\n", 128 | "\n", 129 | "onde\n", 130 | "\n", 131 | "$$\\text{Bias}(\\hat{f}(x)) = \\mathbb{E}[\\hat{f}(x)] - f(x)$$\n", 132 | "\n", 133 | "e\n", 134 | "\n", 135 | "$$\\text{Var}[\\hat{f}(x)] = \\mathbb{E}[\\hat{f}(x)^{2}] - \\mathbb{E}[\\hat{f}(x)]^{2}$$\n", 136 | "\n", 137 | "O viés se deve à escolha do modelo, que pode ter sido muito simples para o problema em mãos. Por exemplo, se temos um problema altamente não linear e escolhemos um modelos linear simples, introduziremos o nosso viés na escolha do modelo, resultando em predições fracas e uma baixa performance. Geralmente, o viés é relacionado _underfitting_ dos dados.\n", 138 | "\n", 139 | "A variância, por outro lado, está relacionada à complexidade do modelo. Isso se traduz em pequenas variações dos dados resultando em grandes variações nas predições, o que não deveria acontecer. Um modelo com alta variância, por exemplo um modelo de regressão com excessivas _features_ polinomiais, geralmente apresenta _overfitting_ dos dados.\n", 140 | "\n", 141 | "O erro irredutível é parte inerente do modelo e que não pode ser reduzido. Para reduzirmos o erro do modelo, devemos nos focar então em reduzir o viés ou a variância.\n", 142 | "\n", 143 | "Acontece que não podemos reduzir ambos simultaneamente: ao reduzirmos o viés, aumentamos a variância e vice-versa. Por isso trata-se de um _trade-off_. Devemos escolher reduzir o viés ou a variância (o que for possível com o modelo e o que levar aos melhores resultados)." 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": { 149 | "id": "1QDPs5_qJwwL", 150 | "colab_type": "text" 151 | }, 152 | "source": [ 153 | "![mse-train-test](http://www.thefactmachine.com/wp-content/uploads/2015/04/14-Ridge-TestTrainingGraph.jpg)\n", 154 | "\n", 155 | "Note na figura acima como o MSE de treinamento é sempre descendente, enquanto o de teste tem a forma de um 'U'. Durante o treino, o modelo tenta se ajustar ao máximo ao conjunto de dados apresentado a ele (o conjunto de treinamento), levando a um \"superaprendizado\" desses dados. Chamamos isso de _overfitting_: o modelo não aprende a generalizar, e sim a decorar os dados apresentados durante o treinamento. Por outro lado, se o modelo for muito mais simples do que a realidade que se tenta modelar, observaremos _underfitting_: o modelo não consegue capturar as variações legítimas dos dados e, portanto, performa de forma não satisfatória.\n", 156 | "\n", 157 | "![overfitting-underfitting](https://miro.medium.com/max/1400/1*9hPX9pAO3jqLrzt0IE3JzA.png)\n", 158 | "\n", 159 | "O que estamos interessados é no erro cometido durante o teste (ou validação) do modelo, quando novos dados (não utilizados durante o treinamento) são apresentados ao modelo e sua performance é então avaliada. Quando o modelo tem pouca flexibilidade (alto viés e baixa variância), o modelo erra muito durante o teste, tendo alto erro e baixo desempenho. De acordo em que a flexibilidade do modelo aumenta (baixo viés e alta variância) o modelo começa a acertar mais (cometer menos erro) durante um tempo, e logo depois começa a errar mais novamente. O que queremos é exatamente o ponto intermediário onde ele erra o mínimo durante o teste. Esse é o ponto ótimo do modelo e os hiperparâmetros utilizados pelo modelo nesse momento são ótimos." 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": { 165 | "id": "pD_wyTDK2YeS", 166 | "colab_type": "text" 167 | }, 168 | "source": [ 169 | "## Regressão linear\n", 170 | "\n", 171 | "Agora vamos analisar o modelo de regressão linear. Trata-se de um modelo antigo, com seus primeiros estudos feitos por Legendre e Gauss, mas que só teve a nomeação de _regressão_ dada por Sir Francis Galton em seus estudos sobre alturas de pais e filhos.\n", 172 | "\n", 173 | "Duas observações muito importantes antes de prosseguirmos:\n", 174 | "\n", 175 | "1. A regressão linear possui uma série de suposições estatísticas e propriedades que são importantes e tentaremos apresentar aqui.\n", 176 | "2. Apesar do nome, a regressão linear também lida com relações não lineares, basta introduzir variáveis polinomiais por exemplo.\n", 177 | "\n", 178 | "O problema que tentamos resolver aqui é um problema de regressão: dadas variáveis independentes, desejamos prever uma variável numérica dependente.\n", 179 | "\n", 180 | "Por exemplo, a partir de dados de sensores (temperatura, pressão, umidade etc), podemos estar interessados em predizer a resistência de um certo material. Os diversos nomes atribuídos a ambas variáveis dependentes e independentes no contexto da regressão são mostrados abaixo:\n", 181 | "\n", 182 | "![terminology](https://drive.google.com/uc?export=download&id=1-0KctX0PRWhvHSj_bBbw4EuzwDs0sTJ3)\n", 183 | "\n", 184 | "Em um problema de regressão, as variáveis independentes podem ser numéricas ou categóricas, enquanto a variável explicada é sempre numérica." 185 | ] 186 | }, 187 | { 188 | "cell_type": "markdown", 189 | "metadata": { 190 | "id": "73lbxqc8-x5m", 191 | "colab_type": "text" 192 | }, 193 | "source": [ 194 | "### Modelo teórico\n", 195 | "\n", 196 | "Vamos começar com o caso mais simples de regressão linear, onde temos apenas uma variável independente. Chamaremos essa variável de $X$ e a variável dependente de $Y$. Nesse cenário, podemos dizer que o valor esperado de $Y$ para um valor $X_{i}$ de $X$ tem a forma\n", 197 | "\n", 198 | "$$\\mathbb{E}[Y | X_{i}] = f(X_{i})$$\n", 199 | "\n", 200 | "Note que $f(X)$ é a \"verdade\", uma relação teórica com parâmetros desconhecidos.\n", 201 | "\n", 202 | "Podemos imaginar que essa relação é estreitamente linear e dizer que\n", 203 | "\n", 204 | "$$f(X_{i}) = \\beta_{1} + \\beta_{2} X_{i}$$\n", 205 | "\n", 206 | "Chamamos a função $f(X_{i})$ de função de regressão populacional, FRP, e ela geralmente é desconhecida, assim como todo parâmetro populacional. Em outras palavras, não conhecemos os parâmetros $\\beta_{0}$ e $\\beta_{1}$ que descrevem exatamente a relação entre $X$ e $Y$.\n", 207 | "\n", 208 | "![model](https://www.jmp.com/en_us/statistics-knowledge-portal/what-is-regression/simple-linear-regression-model/_jcr_content/par/styledcontainer_2069/par/lightbox_55ba/lightboxImage.img.gif/1562878184943.gif)\n", 209 | "\n", 210 | "Para um dado valor $X_{i}$ de $X$, observamos um determinado valor $Y_{i}$ de $Y$. Para não trabalharmos mais com $\\mathbb{E}[Y | X_{i}]$ e sim com $Y_{i}$, precisamos introduzir o termo de erro:\n", 211 | "\n", 212 | "$$Y_{i} = \\beta_{1} + \\beta_{2} X_{i} + u_{i}$$\n", 213 | "\n", 214 | "Como não conhecemos a FRP, vamos estimá-la a partir de uma função de regressão amostral, FRA. Podemos escrever a FRA como\n", 215 | "\n", 216 | "$$Y_{i} = \\hat{f}(X_{i}) = \\hat{\\beta}_{1} + \\hat{\\beta}_{2} X_{i} + \\hat{u}_{i}$$\n", 217 | "\n", 218 | "A relação entre a FRP (PRF), a FRA (SRF) e suas componentes é ilustrada abaixo:\n", 219 | "\n", 220 | "![relation](https://drive.google.com/uc?export=download&id=1I1gLeak5Vz8OVSd_hAoC1efo-XCDdc-x)\n", 221 | "\n", 222 | "Essa base teórica nos serve para entendermos de forma mais sólida o problema estatístico por baixo dos panos. Toda análise feita com apenas uma variável independente aqui se estende diretamente ao problema com múltiplas variáveis." 223 | ] 224 | }, 225 | { 226 | "cell_type": "markdown", 227 | "metadata": { 228 | "id": "wq3r4UfDJtsh", 229 | "colab_type": "text" 230 | }, 231 | "source": [ 232 | "### Modelo prático\n", 233 | "\n", 234 | "Entendido o problema teórico, vamos partir para uma versão mais simples e prática do problema, já com múltiplas variáveis. O que queremos é estimar uma variável $y$ a partir de dados de $p$ variáveis $x$ através de um modelo de regressão. Isso pode ser escrito como\n", 235 | "\n", 236 | "$$\\hat{y}_{i} = \\hat{\\beta}_{0} + \\hat{\\beta}_{1} x_{i1} + \\hat{\\beta}_{2} x_{i2} + \\cdots + \\hat{\\beta}_{p} x_{ip}$$\n", 237 | "\n", 238 | "onde $i$ denota a $i$-ésima observação do conjunto de treino.\n", 239 | "\n", 240 | "Como $\\hat{y}$ é uma aproximação para o verdadeiro $y$, então, para cada observação $i$ da amostra, existe um erro/resíduo associado $e_{i}$ entre o valor observado e a predição:\n", 241 | "\n", 242 | "$$e_{i} = y_{i} - \\hat{y}_{i}$$\n", 243 | "\n", 244 | "Na figura abaixo, a curva em azul denota $\\hat{y}$, enquanto os pontos vermelhos são os valores $y_{i}$ da amostra. As barras pretas entre $y_{i}$ e $\\hat{y}_{i}$ denotam os resíduos, ou erros de predição, $e_{i}$.\n", 245 | "\n", 246 | "![residual](https://uc-r.github.io/public/images/analytics/regression/sq.errors-1.png)" 247 | ] 248 | }, 249 | { 250 | "cell_type": "markdown", 251 | "metadata": { 252 | "id": "U5nJhuqON6uT", 253 | "colab_type": "text" 254 | }, 255 | "source": [ 256 | "A soma de todos $e_{i}$ ($i = 1, 2, \\cdots, n$) é chamado de soma quadrática dos resíduos, RSS (_Residual Sum of Squares_):\n", 257 | "\n", 258 | "$$\\text{RSS} = \\sum_{1 \\leq i \\leq n} e_{i}^{2} = \\sum_{1 \\leq i \\leq n} (y_{i} - \\hat{y}_{i})^{2}$$\n", 259 | "\n", 260 | "É uma variação dela que queremos minimizar durante o treino, o MSE (_Mean Squared Error_):\n", 261 | "\n", 262 | "$$\\text{MSE} = \\frac{1}{n} \\sum_{1 \\leq i \\leq n} e_{i}^{2} = \\frac{1}{n} \\sum_{1 \\leq i \\leq n} (y_{i} - \\hat{y}_{i})^{2}$$\n", 263 | "\n", 264 | "Em outras palavras, o problema que queremos resolver é minimizar a seguinte função:\n", 265 | "\n", 266 | "$$\\underset{\\hat{\\beta}_{0}, \\hat{\\beta}_{2}, \\cdots, \\hat{\\beta}_{p}}{\\text{minimizar}} \\text{MSE} = \\frac{1}{n} \\sum_{1 \\leq i \\leq n} (y_{i} - \\hat{\\beta}_{0} - \\sum_{1 \\leq j \\leq p} \\hat{\\beta}_{j}x_{ij})^{2}$$\n", 267 | "\n", 268 | "Apesar disso, para avaliar o nosso modelo após treinado, utilizamos o RMSE (_Root Mean Square Error_):\n", 269 | "\n", 270 | "$$\\text{RMSE} = \\sqrt{\\frac{1}{n} \\sum_{1 \\leq i \\leq n} e_{i}^{2} = \\sum_{1 \\leq i \\leq n} (y_{i} - \\hat{y}_{i})^{2}}$$\n", 271 | "\n", 272 | "O motivo para isso é que, devido suas propriedades analíticas (derivação etc), é bem mais fácil estimar os valores de $\\beta$ utilizando o MSE do que utilizando o RMSE.\n", 273 | "\n", 274 | "O RMSE é o erro-padrão dos erros. Ele é uma medida de quanto o nosso modelo erra ao predizer valores que não foram usadas durante o treinamento." 275 | ] 276 | }, 277 | { 278 | "cell_type": "markdown", 279 | "metadata": { 280 | "id": "YhlA16tdPnfV", 281 | "colab_type": "text" 282 | }, 283 | "source": [ 284 | "Um jeito de encontrar os valores de $\\hat{\\beta}_{0}, \\hat{\\beta}_{1}, \\cdots, \\hat{\\beta}_{p}$, ou seja, de treinar o nosso modelo é utilizando a equação normal:\n", 285 | "\n", 286 | "$$\\hat{\\beta} = (X^{T}X)^{-1} X^{T} y$$\n", 287 | "\n", 288 | "É muito comum utilizar a matriz pseudoinversa de Moore-Penrose, $X^{+}$, dada sua facilidade de computação e maior robustez em casos excepcionais:\n", 289 | "\n", 290 | "$$\\hat{\\beta} = X^{+} y$$\n" 291 | ] 292 | }, 293 | { 294 | "cell_type": "markdown", 295 | "metadata": { 296 | "id": "X9fVn_uucTJD", 297 | "colab_type": "text" 298 | }, 299 | "source": [ 300 | "Para ver isso na prática, vamos utilizar o _data set_ famoso de casas de Boston (sim, ele mesmo):" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "metadata": { 306 | "id": "YHKKG7jMcfJK", 307 | "colab_type": "code", 308 | "outputId": "a6530f4c-2c02-42b1-87f6-ea3daf1652f6", 309 | "colab": { 310 | "base_uri": "https://localhost:8080/", 311 | "height": 206 312 | } 313 | }, 314 | "source": [ 315 | "boston_dataset = load_boston()\n", 316 | "\n", 317 | "boston_features = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)\n", 318 | "boston_target = pd.DataFrame(boston_dataset.target, columns=[\"Price\"])\n", 319 | "\n", 320 | "boston = pd.concat([boston_features, boston_target], axis=1)\n", 321 | "\n", 322 | "boston.head(5)" 323 | ], 324 | "execution_count": 0, 325 | "outputs": [ 326 | { 327 | "output_type": "execute_result", 328 | "data": { 329 | "text/html": [ 330 | "
\n", 331 | "\n", 344 | "\n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | "
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTATPrice
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.9824.0
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.1421.6
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.0334.7
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.9433.4
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.3336.2
\n", 452 | "
" 453 | ], 454 | "text/plain": [ 455 | " CRIM ZN INDUS CHAS NOX ... TAX PTRATIO B LSTAT Price\n", 456 | "0 0.00632 18.0 2.31 0.0 0.538 ... 296.0 15.3 396.90 4.98 24.0\n", 457 | "1 0.02731 0.0 7.07 0.0 0.469 ... 242.0 17.8 396.90 9.14 21.6\n", 458 | "2 0.02729 0.0 7.07 0.0 0.469 ... 242.0 17.8 392.83 4.03 34.7\n", 459 | "3 0.03237 0.0 2.18 0.0 0.458 ... 222.0 18.7 394.63 2.94 33.4\n", 460 | "4 0.06905 0.0 2.18 0.0 0.458 ... 222.0 18.7 396.90 5.33 36.2\n", 461 | "\n", 462 | "[5 rows x 14 columns]" 463 | ] 464 | }, 465 | "metadata": { 466 | "tags": [] 467 | }, 468 | "execution_count": 26 469 | } 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "metadata": { 475 | "id": "bgfHVlXkdWW3", 476 | "colab_type": "code", 477 | "outputId": "db482b68-ff90-4a52-e616-142e3650e985", 478 | "colab": { 479 | "base_uri": "https://localhost:8080/", 480 | "height": 923 481 | } 482 | }, 483 | "source": [ 484 | "print(boston_dataset.DESCR)" 485 | ], 486 | "execution_count": 0, 487 | "outputs": [ 488 | { 489 | "output_type": "stream", 490 | "text": [ 491 | ".. _boston_dataset:\n", 492 | "\n", 493 | "Boston house prices dataset\n", 494 | "---------------------------\n", 495 | "\n", 496 | "**Data Set Characteristics:** \n", 497 | "\n", 498 | " :Number of Instances: 506 \n", 499 | "\n", 500 | " :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.\n", 501 | "\n", 502 | " :Attribute Information (in order):\n", 503 | " - CRIM per capita crime rate by town\n", 504 | " - ZN proportion of residential land zoned for lots over 25,000 sq.ft.\n", 505 | " - INDUS proportion of non-retail business acres per town\n", 506 | " - CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", 507 | " - NOX nitric oxides concentration (parts per 10 million)\n", 508 | " - RM average number of rooms per dwelling\n", 509 | " - AGE proportion of owner-occupied units built prior to 1940\n", 510 | " - DIS weighted distances to five Boston employment centres\n", 511 | " - RAD index of accessibility to radial highways\n", 512 | " - TAX full-value property-tax rate per $10,000\n", 513 | " - PTRATIO pupil-teacher ratio by town\n", 514 | " - B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n", 515 | " - LSTAT % lower status of the population\n", 516 | " - MEDV Median value of owner-occupied homes in $1000's\n", 517 | "\n", 518 | " :Missing Attribute Values: None\n", 519 | "\n", 520 | " :Creator: Harrison, D. and Rubinfeld, D.L.\n", 521 | "\n", 522 | "This is a copy of UCI ML housing dataset.\n", 523 | "https://archive.ics.uci.edu/ml/machine-learning-databases/housing/\n", 524 | "\n", 525 | "\n", 526 | "This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n", 527 | "\n", 528 | "The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\n", 529 | "prices and the demand for clean air', J. Environ. Economics & Management,\n", 530 | "vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n", 531 | "...', Wiley, 1980. N.B. Various transformations are used in the table on\n", 532 | "pages 244-261 of the latter.\n", 533 | "\n", 534 | "The Boston house-price data has been used in many machine learning papers that address regression\n", 535 | "problems. \n", 536 | " \n", 537 | ".. topic:: References\n", 538 | "\n", 539 | " - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n", 540 | " - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", 541 | "\n" 542 | ], 543 | "name": "stdout" 544 | } 545 | ] 546 | }, 547 | { 548 | "cell_type": "markdown", 549 | "metadata": { 550 | "id": "TpAl4akyh940", 551 | "colab_type": "text" 552 | }, 553 | "source": [ 554 | "Vamos começar separando o nosso conjunto de dados em dois grupos: treinamento (80%) e teste (20%)." 555 | ] 556 | }, 557 | { 558 | "cell_type": "code", 559 | "metadata": { 560 | "id": "J9hdZPsfiFqN", 561 | "colab_type": "code", 562 | "colab": {} 563 | }, 564 | "source": [ 565 | "boston_features_train, boston_features_test, boston_target_train, boston_target_test = train_test_split(boston_features,\n", 566 | " boston_target,\n", 567 | " test_size=0.2,\n", 568 | " random_state=42)" 569 | ], 570 | "execution_count": 0, 571 | "outputs": [] 572 | }, 573 | { 574 | "cell_type": "markdown", 575 | "metadata": { 576 | "id": "PJQLE2ECfFOU", 577 | "colab_type": "text" 578 | }, 579 | "source": [ 580 | "Vamos treinar o modelo com todos os dados do conjunto primeiro:" 581 | ] 582 | }, 583 | { 584 | "cell_type": "code", 585 | "metadata": { 586 | "id": "oAWYUXCrfIbQ", 587 | "colab_type": "code", 588 | "outputId": "c8cc2210-c66e-48f2-d5e2-4750cbfac8cf", 589 | "colab": { 590 | "base_uri": "https://localhost:8080/", 591 | "height": 34 592 | } 593 | }, 594 | "source": [ 595 | "linear_regression = LinearRegression()\n", 596 | "\n", 597 | "linear_regression.fit(boston_features_train, boston_target_train)" 598 | ], 599 | "execution_count": 0, 600 | "outputs": [ 601 | { 602 | "output_type": "execute_result", 603 | "data": { 604 | "text/plain": [ 605 | "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" 606 | ] 607 | }, 608 | "metadata": { 609 | "tags": [] 610 | }, 611 | "execution_count": 29 612 | } 613 | ] 614 | }, 615 | { 616 | "cell_type": "markdown", 617 | "metadata": { 618 | "id": "18azFEr1LMH2", 619 | "colab_type": "text" 620 | }, 621 | "source": [ 622 | "Utilizaremos os dados do conjunto de teste para fazer predições. Note que nenhum desses dados de teste foram utilizados durante o treinamento do modelo:" 623 | ] 624 | }, 625 | { 626 | "cell_type": "code", 627 | "metadata": { 628 | "id": "ZrT37Le_gRgs", 629 | "colab_type": "code", 630 | "outputId": "b2d686ff-ae67-472f-ec54-f6f2ef3406ae", 631 | "colab": { 632 | "base_uri": "https://localhost:8080/", 633 | "height": 104 634 | } 635 | }, 636 | "source": [ 637 | "predicted = linear_regression.predict(boston_features_test)\n", 638 | "\n", 639 | "predicted[:5]" 640 | ], 641 | "execution_count": 0, 642 | "outputs": [ 643 | { 644 | "output_type": "execute_result", 645 | "data": { 646 | "text/plain": [ 647 | "array([[28.99672362],\n", 648 | " [36.02556534],\n", 649 | " [14.81694405],\n", 650 | " [25.03197915],\n", 651 | " [18.76987992]])" 652 | ] 653 | }, 654 | "metadata": { 655 | "tags": [] 656 | }, 657 | "execution_count": 30 658 | } 659 | ] 660 | }, 661 | { 662 | "cell_type": "markdown", 663 | "metadata": { 664 | "id": "B6LLMVcKLS7i", 665 | "colab_type": "text" 666 | }, 667 | "source": [ 668 | "Os verdadeiros valores de preço para os dados previstos acima são mostrados abaixo:" 669 | ] 670 | }, 671 | { 672 | "cell_type": "code", 673 | "metadata": { 674 | "id": "8MNyZrrwjzs5", 675 | "colab_type": "code", 676 | "outputId": "9382a36d-fd67-42cd-a557-a9757588bd81", 677 | "colab": { 678 | "base_uri": "https://localhost:8080/", 679 | "height": 104 680 | } 681 | }, 682 | "source": [ 683 | "boston_target_test.values[:5]" 684 | ], 685 | "execution_count": 0, 686 | "outputs": [ 687 | { 688 | "output_type": "execute_result", 689 | "data": { 690 | "text/plain": [ 691 | "array([[23.6],\n", 692 | " [32.4],\n", 693 | " [13.6],\n", 694 | " [22.8],\n", 695 | " [16.1]])" 696 | ] 697 | }, 698 | "metadata": { 699 | "tags": [] 700 | }, 701 | "execution_count": 45 702 | } 703 | ] 704 | }, 705 | { 706 | "cell_type": "markdown", 707 | "metadata": { 708 | "id": "c86NH5qzLYMH", 709 | "colab_type": "text" 710 | }, 711 | "source": [ 712 | "Podemos verificar os valores do parâmetros estimados, excluindo o intercepto, através do atributo `coef_` disponível no modelo após o treinamento (i.e., após a chamada da função `fit()`):" 713 | ] 714 | }, 715 | { 716 | "cell_type": "code", 717 | "metadata": { 718 | "id": "5c1z0-KMhpy1", 719 | "colab_type": "code", 720 | "outputId": "f2a034bc-d942-4e03-ed50-ed9bb9e1b464", 721 | "colab": { 722 | "base_uri": "https://localhost:8080/", 723 | "height": 69 724 | } 725 | }, 726 | "source": [ 727 | "linear_regression.coef_.round(2)" 728 | ], 729 | "execution_count": 0, 730 | "outputs": [ 731 | { 732 | "output_type": "execute_result", 733 | "data": { 734 | "text/plain": [ 735 | "array([[-1.10e-01, 3.00e-02, 4.00e-02, 2.78e+00, -1.72e+01, 4.44e+00,\n", 736 | " -1.00e-02, -1.45e+00, 2.60e-01, -1.00e-02, -9.20e-01, 1.00e-02,\n", 737 | " -5.10e-01]])" 738 | ] 739 | }, 740 | "metadata": { 741 | "tags": [] 742 | }, 743 | "execution_count": 32 744 | } 745 | ] 746 | }, 747 | { 748 | "cell_type": "markdown", 749 | "metadata": { 750 | "id": "pRuj7WmOLlZ-", 751 | "colab_type": "text" 752 | }, 753 | "source": [ 754 | "O valor do intercepto pode ser obtido através do atributo `intercept_`:" 755 | ] 756 | }, 757 | { 758 | "cell_type": "code", 759 | "metadata": { 760 | "id": "0GXPX3DikQYj", 761 | "colab_type": "code", 762 | "outputId": "e88d5fe1-c5ad-4a7b-dc0c-ac64ccaa4a11", 763 | "colab": { 764 | "base_uri": "https://localhost:8080/", 765 | "height": 34 766 | } 767 | }, 768 | "source": [ 769 | "linear_regression.intercept_.round(2)" 770 | ], 771 | "execution_count": 0, 772 | "outputs": [ 773 | { 774 | "output_type": "execute_result", 775 | "data": { 776 | "text/plain": [ 777 | "array([30.25])" 778 | ] 779 | }, 780 | "metadata": { 781 | "tags": [] 782 | }, 783 | "execution_count": 33 784 | } 785 | ] 786 | }, 787 | { 788 | "cell_type": "markdown", 789 | "metadata": { 790 | "id": "OtMvNntPL5uS", 791 | "colab_type": "text" 792 | }, 793 | "source": [ 794 | "Para mostrar a matemática por trás do treinamento desses modelos, vamos criar um `np.ndarray` com as variáveis e os valores de preço:" 795 | ] 796 | }, 797 | { 798 | "cell_type": "code", 799 | "metadata": { 800 | "id": "XQJmlfXuiKeg", 801 | "colab_type": "code", 802 | "colab": {} 803 | }, 804 | "source": [ 805 | "boston_complete_train = np.c_[np.ones(boston_features_train.shape[0]), boston_features_train.values]" 806 | ], 807 | "execution_count": 0, 808 | "outputs": [] 809 | }, 810 | { 811 | "cell_type": "markdown", 812 | "metadata": { 813 | "id": "E37MtRvdMGkx", 814 | "colab_type": "text" 815 | }, 816 | "source": [ 817 | "E utilizar as operações matriciais e vetoriais disponíveis no NumPy para calcular a equação normal:\n", 818 | "\n", 819 | "$$\\hat{\\beta} = (X^{T}X)^{-1} X^{T} y$$\n", 820 | "\n" 821 | ] 822 | }, 823 | { 824 | "cell_type": "code", 825 | "metadata": { 826 | "id": "kxXideiIlFLm", 827 | "colab_type": "code", 828 | "outputId": "038956be-7384-4789-be23-0d2ec4c82629", 829 | "colab": { 830 | "base_uri": "https://localhost:8080/", 831 | "height": 260 832 | } 833 | }, 834 | "source": [ 835 | "np.linalg.inv(boston_complete_train.T.dot(boston_complete_train)).dot(boston_complete_train.T).dot(boston_target_train.values).round(2)" 836 | ], 837 | "execution_count": 0, 838 | "outputs": [ 839 | { 840 | "output_type": "execute_result", 841 | "data": { 842 | "text/plain": [ 843 | "array([[ 3.025e+01],\n", 844 | " [-1.100e-01],\n", 845 | " [ 3.000e-02],\n", 846 | " [ 4.000e-02],\n", 847 | " [ 2.780e+00],\n", 848 | " [-1.720e+01],\n", 849 | " [ 4.440e+00],\n", 850 | " [-1.000e-02],\n", 851 | " [-1.450e+00],\n", 852 | " [ 2.600e-01],\n", 853 | " [-1.000e-02],\n", 854 | " [-9.200e-01],\n", 855 | " [ 1.000e-02],\n", 856 | " [-5.100e-01]])" 857 | ] 858 | }, 859 | "metadata": { 860 | "tags": [] 861 | }, 862 | "execution_count": 35 863 | } 864 | ] 865 | }, 866 | { 867 | "cell_type": "markdown", 868 | "metadata": { 869 | "id": "RS7LYh90MVir", 870 | "colab_type": "text" 871 | }, 872 | "source": [ 873 | "Repare como os valores dos parâmetros estimados acima são iguais aos valores retornados pelo modelo em `linear_regression`." 874 | ] 875 | }, 876 | { 877 | "cell_type": "markdown", 878 | "metadata": { 879 | "id": "dl6Vnww9Me4n", 880 | "colab_type": "text" 881 | }, 882 | "source": [ 883 | "Uma outra forma de calcular os mesmos parâmetros é utilizar a função `lstsq()` também do NumPy. Ela calcula exatamente o produto da matriz pseudoinversa de Moore-Penrose pela variável dependente:\n", 884 | "\n", 885 | "$$\\hat{\\beta} = X^{+} y$$" 886 | ] 887 | }, 888 | { 889 | "cell_type": "code", 890 | "metadata": { 891 | "id": "PFhyTeL5lD-h", 892 | "colab_type": "code", 893 | "outputId": "60a266c9-340c-483a-f91d-c161f5c3f320", 894 | "colab": { 895 | "base_uri": "https://localhost:8080/", 896 | "height": 260 897 | } 898 | }, 899 | "source": [ 900 | "coeff_svd, _res, _rank, _s = np.linalg.lstsq(boston_complete_train, boston_target_train.values, rcond=1e-6)\n", 901 | "\n", 902 | "coeff_svd.round(2)" 903 | ], 904 | "execution_count": 0, 905 | "outputs": [ 906 | { 907 | "output_type": "execute_result", 908 | "data": { 909 | "text/plain": [ 910 | "array([[ 3.025e+01],\n", 911 | " [-1.100e-01],\n", 912 | " [ 3.000e-02],\n", 913 | " [ 4.000e-02],\n", 914 | " [ 2.780e+00],\n", 915 | " [-1.720e+01],\n", 916 | " [ 4.440e+00],\n", 917 | " [-1.000e-02],\n", 918 | " [-1.450e+00],\n", 919 | " [ 2.600e-01],\n", 920 | " [-1.000e-02],\n", 921 | " [-9.200e-01],\n", 922 | " [ 1.000e-02],\n", 923 | " [-5.100e-01]])" 924 | ] 925 | }, 926 | "metadata": { 927 | "tags": [] 928 | }, 929 | "execution_count": 36 930 | } 931 | ] 932 | }, 933 | { 934 | "cell_type": "markdown", 935 | "metadata": { 936 | "id": "CkphxyJhM4tZ", 937 | "colab_type": "text" 938 | }, 939 | "source": [ 940 | "Novamente, chegamos aos mesmos valores estimados." 941 | ] 942 | }, 943 | { 944 | "cell_type": "markdown", 945 | "metadata": { 946 | "id": "4pisml45M7KK", 947 | "colab_type": "text" 948 | }, 949 | "source": [ 950 | "Para finalizar, poderíamos ter utilizado a função `pinv()` que calcula a matriz pseudoinversa de Moore-Penrose (que depois podemos ainda multiplicar pela variável independente):" 951 | ] 952 | }, 953 | { 954 | "cell_type": "code", 955 | "metadata": { 956 | "id": "3gEIA8S6ksbA", 957 | "colab_type": "code", 958 | "outputId": "0f436f7b-03fd-4f5d-ca61-a4b4a3178863", 959 | "colab": { 960 | "base_uri": "https://localhost:8080/", 961 | "height": 260 962 | } 963 | }, 964 | "source": [ 965 | "np.linalg.pinv(boston_complete_train).dot(boston_target_train.values).round(2)" 966 | ], 967 | "execution_count": 0, 968 | "outputs": [ 969 | { 970 | "output_type": "execute_result", 971 | "data": { 972 | "text/plain": [ 973 | "array([[ 3.025e+01],\n", 974 | " [-1.100e-01],\n", 975 | " [ 3.000e-02],\n", 976 | " [ 4.000e-02],\n", 977 | " [ 2.780e+00],\n", 978 | " [-1.720e+01],\n", 979 | " [ 4.440e+00],\n", 980 | " [-1.000e-02],\n", 981 | " [-1.450e+00],\n", 982 | " [ 2.600e-01],\n", 983 | " [-1.000e-02],\n", 984 | " [-9.200e-01],\n", 985 | " [ 1.000e-02],\n", 986 | " [-5.100e-01]])" 987 | ] 988 | }, 989 | "metadata": { 990 | "tags": [] 991 | }, 992 | "execution_count": 37 993 | } 994 | ] 995 | }, 996 | { 997 | "cell_type": "markdown", 998 | "metadata": { 999 | "id": "mUjW2KCHNUho", 1000 | "colab_type": "text" 1001 | }, 1002 | "source": [ 1003 | "A partir do vetor de parâmetroes estimados, podemos prever o valor do preço de uma casa a partir das variáveis:" 1004 | ] 1005 | }, 1006 | { 1007 | "cell_type": "code", 1008 | "metadata": { 1009 | "id": "e2vyCdjBlasY", 1010 | "colab_type": "code", 1011 | "outputId": "d9c5c4ea-4f6b-48b5-97fd-fe324ce68757", 1012 | "colab": { 1013 | "base_uri": "https://localhost:8080/", 1014 | "height": 34 1015 | } 1016 | }, 1017 | "source": [ 1018 | "first_house = boston_complete_train[0, :]\n", 1019 | "\n", 1020 | "first_house_predicted = first_house.dot(coeff_svd)\n", 1021 | "\n", 1022 | "first_house_predicted" 1023 | ], 1024 | "execution_count": 0, 1025 | "outputs": [ 1026 | { 1027 | "output_type": "execute_result", 1028 | "data": { 1029 | "text/plain": [ 1030 | "array([10.96952405])" 1031 | ] 1032 | }, 1033 | "metadata": { 1034 | "tags": [] 1035 | }, 1036 | "execution_count": 38 1037 | } 1038 | ] 1039 | }, 1040 | { 1041 | "cell_type": "markdown", 1042 | "metadata": { 1043 | "id": "R8Rvyv0xrWfw", 1044 | "colab_type": "text" 1045 | }, 1046 | "source": [ 1047 | "## _Ridge_\n", 1048 | "\n", 1049 | "A regressão _ridge_ é uma forma de regularizar a regressão linear. O objetivo é aprender um modelo de regressão ao mesmo tempo em que mantém reduzidas as magnitudes dos parâmetros aprendidos.\n", 1050 | "\n", 1051 | "Para isso, adicionamos um termo de regularização à função de custo:\n", 1052 | "\n", 1053 | "$$J^{\\text{ridge}}(\\hat{\\beta}) = \\frac{1}{n} \\sum_{1 \\leq i \\leq n} (y_{i} - \\hat{\\beta}_{0} - \\sum_{1 \\leq j \\leq p} \\hat{\\beta}_{j}x_{ij})^{2} + \\underbrace{\\lambda \\sum_{1 \\leq j \\leq p} \\hat{\\beta}_{j}^{2}}_{\\text{termo de regularização}}$$\n", 1054 | "\n", 1055 | "Note como no termo de regularização, consideramos apenas os parâmetros $\\hat{\\beta}$ de índices 1 a $p$. Isso porque não queremos regularizar o intercepto ($\\hat{\\beta}_{0}$)." 1056 | ] 1057 | }, 1058 | { 1059 | "cell_type": "markdown", 1060 | "metadata": { 1061 | "id": "7FB2ZaVPRNAd", 1062 | "colab_type": "text" 1063 | }, 1064 | "source": [ 1065 | "O termo $\\lambda$ regula o quanto queremos regularizar o modelo. Para $\\lambda = 0$, a regressão _ridge_ se torna uma regressão linear sem regularização. Conforme aumentamos o valor de $\\lambda$, mais regularizado se torna o modelo, ou seja, menores serão os valores de $\\beta$ estimados.\n", 1066 | "\n", 1067 | "O parâmetro $\\lambda$ é um hiperparâmetro do modelo e deve ser ajustado com métodos como _cross-validation_. A escolha do $\\lambda$ correto é vital para o bom desempenho do _ridge_.\n", 1068 | "\n", 1069 | "Apesar de tornar os parâmetros estimados valores muito pequenos, a regressão _ridge_ não os zera por completo. Em outras palavras, não somos capazes de fazer seleção de variáveis naturalmente com a regressão _ridge_." 1070 | ] 1071 | }, 1072 | { 1073 | "cell_type": "markdown", 1074 | "metadata": { 1075 | "id": "TCF2unm7RmJ4", 1076 | "colab_type": "text" 1077 | }, 1078 | "source": [ 1079 | "O poder da regressão _ridge_ vem justamente do _trade-off bias-variance_. A regressão sem regularização ($\\lambda = 0$) possui grande variância e pouco viés. À medida em que aumentamos $\\lambda$, a variância diminui a uma taxa maior do que o viés aumenta, reduzindo assim o MSE total. A partir de certo ponto, o viés começa a aumentar mais rápido do que a variância aumenta, tornando a aumenta o MSE. Assim, existe um valor intermediário onde o MSE da regressão _ridge_ encontra seu mínimo e que é menor que o MSE da regressão linear sem regularização.\n", 1080 | "\n", 1081 | "Importante notar que realizamos a regularização somente durante o treino. Em todas etapas seguintes (teste, validação, e predição), devemos avaliar a performance do modelo __sem__ regularização.\n", 1082 | "\n", 1083 | "Outro ponto importante é que devemos escalar os dados antes de treinar a regressão _ridge_ utilizando o `StandardScaler`." 1084 | ] 1085 | }, 1086 | { 1087 | "cell_type": "markdown", 1088 | "metadata": { 1089 | "id": "mIMvmHlgRpPN", 1090 | "colab_type": "text" 1091 | }, 1092 | "source": [ 1093 | "A regressão _ridge_ também é chamada de regressão $\\ell_{2}$, pois utiliza a norma-$\\ell_{2}$:\n", 1094 | "\n", 1095 | "$$\\|\\hat{\\beta}\\|_{2} = \\sqrt{\\sum_{j} \\hat{\\beta}_{j}^{2}}$$\n", 1096 | "\n", 1097 | "Vamos utilizar a regressão _ridge_ abaixo:" 1098 | ] 1099 | }, 1100 | { 1101 | "cell_type": "markdown", 1102 | "metadata": { 1103 | "id": "82yGLqHIiq4k", 1104 | "colab_type": "text" 1105 | }, 1106 | "source": [ 1107 | "Começamos escalando os dados:" 1108 | ] 1109 | }, 1110 | { 1111 | "cell_type": "code", 1112 | "metadata": { 1113 | "id": "7tLJpU-bited", 1114 | "colab_type": "code", 1115 | "outputId": "dac198d4-85b2-4620-86da-04540ecda950", 1116 | "colab": { 1117 | "base_uri": "https://localhost:8080/", 1118 | "height": 173 1119 | } 1120 | }, 1121 | "source": [ 1122 | "scaler = StandardScaler()\n", 1123 | "\n", 1124 | "boston_features_train_scaled = scaler.fit_transform(boston_features_train)\n", 1125 | "\n", 1126 | "boston_features_train_scaled[:3]" 1127 | ], 1128 | "execution_count": 0, 1129 | "outputs": [ 1130 | { 1131 | "output_type": "execute_result", 1132 | "data": { 1133 | "text/plain": [ 1134 | "array([[ 1.28770177, -0.50032012, 1.03323679, -0.27808871, 0.48925206,\n", 1135 | " -1.42806858, 1.02801516, -0.80217296, 1.70689143, 1.57843444,\n", 1136 | " 0.84534281, -0.07433689, 1.75350503],\n", 1137 | " [-0.33638447, -0.50032012, -0.41315956, -0.27808871, -0.15723342,\n", 1138 | " -0.68008655, -0.43119908, 0.32434893, -0.62435988, -0.58464788,\n", 1139 | " 1.20474139, 0.4301838 , -0.5614742 ],\n", 1140 | " [-0.40325332, 1.01327135, -0.71521823, -0.27808871, -1.00872286,\n", 1141 | " -0.40206304, -1.6185989 , 1.3306972 , -0.97404758, -0.60272378,\n", 1142 | " -0.63717631, 0.06529747, -0.65159505]])" 1143 | ] 1144 | }, 1145 | "metadata": { 1146 | "tags": [] 1147 | }, 1148 | "execution_count": 39 1149 | } 1150 | ] 1151 | }, 1152 | { 1153 | "cell_type": "code", 1154 | "metadata": { 1155 | "id": "bFNPUGt6O1Hy", 1156 | "colab_type": "code", 1157 | "outputId": "6dec2b04-e61d-4273-bf9a-4bb2bf92fbd7", 1158 | "colab": { 1159 | "base_uri": "https://localhost:8080/", 1160 | "height": 86 1161 | } 1162 | }, 1163 | "source": [ 1164 | "ridge_regression = Ridge(alpha=1, solver=\"cholesky\")\n", 1165 | "\n", 1166 | "ridge_regression.fit(boston_features_train_scaled, boston_target_train)\n", 1167 | "\n", 1168 | "ridge_regression.intercept_, ridge_regression.coef_" 1169 | ], 1170 | "execution_count": 0, 1171 | "outputs": [ 1172 | { 1173 | "output_type": "execute_result", 1174 | "data": { 1175 | "text/plain": [ 1176 | "(array([22.79653465]),\n", 1177 | " array([[-0.99218679, 0.6777488 , 0.2522143 , 0.72248078, -1.99083465,\n", 1178 | " 3.15157218, -0.17726162, -3.04502895, 2.17324941, -1.69555879,\n", 1179 | " -2.02783351, 1.127197 , -3.59897667]]))" 1180 | ] 1181 | }, 1182 | "metadata": { 1183 | "tags": [] 1184 | }, 1185 | "execution_count": 40 1186 | } 1187 | ] 1188 | }, 1189 | { 1190 | "cell_type": "markdown", 1191 | "metadata": { 1192 | "id": "fbH9hNntR86x", 1193 | "colab_type": "text" 1194 | }, 1195 | "source": [ 1196 | "Note como os valores dos parâmetros estimados são bem próximos de zero (exceto o intercepto), mas nenhum exatamente zero." 1197 | ] 1198 | }, 1199 | { 1200 | "cell_type": "markdown", 1201 | "metadata": { 1202 | "id": "Cp0kEpx0FxH4", 1203 | "colab_type": "text" 1204 | }, 1205 | "source": [ 1206 | "![mse-lambda](https://drive.google.com/uc?export=download&id=196MmaQswPNPhBt46zttNJbffFny3bBGH)\n", 1207 | "\n", 1208 | "A figura acima mostra a relação entre o erro (MSE) e o valor de $\\lambda$. A curva preta representa a variância, a curva preta representa o viés, a linha tracejada representa o erro irredutível, e a curva rosa representa o MSE, ou seja, a soma da variância com o quadrado do viés e o erro irredutível.\n", 1209 | "\n", 1210 | "Note como, até certo ponto, a variância diminui mais rápido do que o viés aumenta. Depois o viés aumenta muito mais rapidamente do que a variância consegue diminuir. Em algum ponto intermediário, encontramos o valor ótimo de $\\lambda$, quando o erro total, MSE, é mínimo." 1211 | ] 1212 | }, 1213 | { 1214 | "cell_type": "markdown", 1215 | "metadata": { 1216 | "id": "z3FaBuKbWzXA", 1217 | "colab_type": "text" 1218 | }, 1219 | "source": [ 1220 | "## LASSO\n", 1221 | "\n", 1222 | "LASSO (_Least Absolute Shrinkage and Selection Operator_) é outra forma de regularização de regressão. Em vez de utilizar a norma-$\\ell_{2}$, o LASSO utiliza a norma-$\\ell_{1}$:\n", 1223 | "\n", 1224 | "$$\\|\\hat{\\beta}\\|_{1} = \\sqrt{\\sum_{j} \\| \\hat{\\beta}_{j} \\|}$$\n", 1225 | "\n", 1226 | "A função de custo com o novo termo de regularização adicionado se torna:\n", 1227 | "\n", 1228 | "$$J^{\\text{LASSO}}(\\hat{\\beta}) = \\frac{1}{n} \\sum_{1 \\leq i \\leq n} (y_{i} - \\hat{\\beta}_{0} - \\sum_{1 \\leq j \\leq p} \\hat{\\beta}_{j}x_{ij})^{2} + \\underbrace{\\lambda \\sum_{1 \\leq j \\leq p} \\| \\hat{\\beta}_{j} \\|}_{\\text{termo de regularização}}$$" 1229 | ] 1230 | }, 1231 | { 1232 | "cell_type": "markdown", 1233 | "metadata": { 1234 | "id": "60ltRPqJXxs-", 1235 | "colab_type": "text" 1236 | }, 1237 | "source": [ 1238 | "Essa pequena diferença entre as funções de custo do _ridge_ e do LASSO é o suficiente para termos um comportamente bastante diferente. Ao contrário do _ridge_, o LASSO é capaz de zerar completamente parâmetros de variáveis com pouca relevância para o modelo, gerando um modelo esparso (algumas das variáveis têm parâmetros nulos). Essa é uma forma de seleção de variáveis embutida no próprio modelo.\n", 1239 | "\n", 1240 | "As mesmas observações do _ridge_ valem para o LASSO:\n", 1241 | "\n", 1242 | "* Devemos escalar as variáveis antes de treinar o modelo do LASSO.\n", 1243 | "* Apenas utilizamos a função de custo com o termo de regularização adicionado durante o treino. Em etapas consecutivas (teste, validação, predição etc) devemos avaliar o desempenho do modelo com a função de custo simples, __sem__ regularização." 1244 | ] 1245 | }, 1246 | { 1247 | "cell_type": "code", 1248 | "metadata": { 1249 | "id": "QiTusu_BYv49", 1250 | "colab_type": "code", 1251 | "outputId": "d9e59bdc-acde-45bb-c71a-0c251568f368", 1252 | "colab": { 1253 | "base_uri": "https://localhost:8080/", 1254 | "height": 86 1255 | } 1256 | }, 1257 | "source": [ 1258 | "lasso_regression = Lasso(alpha=0.5)\n", 1259 | "\n", 1260 | "lasso_regression.fit(boston_features_train_scaled, boston_target_train)\n", 1261 | "\n", 1262 | "lasso_regression.intercept_, lasso_regression.coef_" 1263 | ], 1264 | "execution_count": 0, 1265 | "outputs": [ 1266 | { 1267 | "output_type": "execute_result", 1268 | "data": { 1269 | "text/plain": [ 1270 | "(array([22.79653465]),\n", 1271 | " array([-0.30737992, 0. , -0. , 0.40396576, -0. ,\n", 1272 | " 3.32512039, -0. , -0.3333949 , -0. , -0. ,\n", 1273 | " -1.46416614, 0.80194371, -3.53546088]))" 1274 | ] 1275 | }, 1276 | "metadata": { 1277 | "tags": [] 1278 | }, 1279 | "execution_count": 41 1280 | } 1281 | ] 1282 | }, 1283 | { 1284 | "cell_type": "code", 1285 | "metadata": { 1286 | "id": "92Z36MzLmOqW", 1287 | "colab_type": "code", 1288 | "outputId": "36ed2282-96a8-4ced-cd68-b6830efa85de", 1289 | "colab": { 1290 | "base_uri": "https://localhost:8080/", 1291 | "height": 52 1292 | } 1293 | }, 1294 | "source": [ 1295 | "boston_dataset.feature_names" 1296 | ], 1297 | "execution_count": 0, 1298 | "outputs": [ 1299 | { 1300 | "output_type": "execute_result", 1301 | "data": { 1302 | "text/plain": [ 1303 | "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n", 1304 | " 'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='