diff --git a/Trabalho Final/Trabalho.ipynb b/Trabalho Final/Trabalho.ipynb index c76f3bcf85052d530263d8748db40f6a774c72b9..63d64dc93514304e266e354189e05151c0c55c62 100644 --- a/Trabalho Final/Trabalho.ipynb +++ b/Trabalho Final/Trabalho.ipynb @@ -1,12 +1,36 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introdução\n", + "\n", + "## O dataset\n", + "\n", + "O Dataset escolhido contêm informações sobre ataques DDoS Syn-Flood, UDP-Flood e conexões benignas, meu objetivo foi criar formas de detectar e diferenciar um ataque DDoS de conexões normais.\n", + "\n", + "O Dataset foi modificado para manter algumas colunas apenas, o original pode ser baixado [aqui](https://www.unb.ca/cic/datasets/ddos-2019.html)\n", + "\n", + "As colunas mais importantes foram as de portas de saÃda no computador do cliente e portas de entrada nos servidores, bem como a distribuição do tamanho dos pacotes.\n", + "\n", + "## Dificuldades\n", + "\n", + "Inicialmente eu estava sem ideia do que fazer, até achar esse dataset. Inicialmente iria utilizar um dos CSVs que vem nele, contendo apenas Syn-Flood, porém ele era muito grande, estava crashando o Weka com a heap do java tendo 12GB de ram disponÃvel, acabei descartando ele e utilizando este que tem UDP=Flood junto.\n", + "Inicialmente ele continha também amostras de rede de UDP-Lag, porém acabei descartando, visto que as informações que escolhi não eram suficientes para identificar essas amostras. Como tinha pouco tempo e nenhuma experiência, me limitei a estes dados.\n", + "\n", + "## Disclaimer\n", + "\n", + "É a primeira vez que estou mexendo com Data Science, todo o meu conhecimento sobre redes neurais e classificação foram obtidos nessa disciplina, como foi algo muito corrido e puxado, os resultados não são tão bons ao meu ver." + ] + }, { "cell_type": "markdown", "metadata": { "scrolled": true }, "source": [ - "# Carregamento dos dados\n", + "## Carregamento dos dados\n", "\n", "A primeira coisa a se fazer é carregar os pacotes e dados utilizados" ] @@ -99,12 +123,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "Podemos ver que o dataset tem uma divisão não muito justa com conexões benignas, sendo composto majoritariamente por Syn Flood.\n", + "Mesmo assim, os dados utilizados são muito destoantes, principalmente no que se refere a tamanhos de pacotes, portanto a detecção é bem fácil, mesmo com essa diferença de quantidades.\n", + "\n", "Agora começa o treinamento do KNN" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -363,6 +390,29 @@ "ax.grid(alpha=.4)\n", "plt.show()" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conclusão\n", + "\n", + "Acredito que os resultados tenham sido estes pelo dataset set um pouco \"óbvio\" no que se refere à s portas, tamanhos de pacotes, entre outros.\n", + "As curvas ROC chegam a ser engraçadas, pela detecção quase perfeita, são praticamente uma constante.\n", + "\n", + "## KNN\n", + "\n", + "O KNN teve ótimos resultados independentemente da quantidade de vizinhos escolhidos, em execuções com 2, 3, 5 ou 10 vizinhos, os resultados foram muito semelhantes, próximos a 100% de precisão.\n", + "\n", + "## Ãrvore de decisão\n", + "\n", + "A árvore de decisão executou de maneira estranha algumas vezes, em algumas situações obteve apenas 1% de precisão na detecção de conexões benignas, nessa em especÃfico teve um ótimo resultado.\n", + "\n", + "## MLPClassifier\n", + "\n", + "O MLP foi o algoritmo de redes neurais que eu escolhi utilizar, apesar de não conhecer muito ele, obteve ótimos resultados.\n", + "Como eu não conheço ele muito bem, acabei não brincando com as suas variáveis." + ] } ], "metadata": {