From 7573bd6b897e2024099832a732a265195fecc758 Mon Sep 17 00:00:00 2001 From: Yeseo Jang Date: Mon, 28 Feb 2022 21:13:04 +0900 Subject: [PATCH 1/3] updata curriculum --- README.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7664941..0fa0641 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,29 @@ -# 2022-1-Euron-Study-Assignments -Euron 2기 스터디팀 예습·복습 과제 제출 +# Euron 2기 예습·복습 과제 제출 + +### ▶ [Computer Vision](https://github.com/Ewha-Euron/2022-1-Euron-CV) +### ▶ [Natural Language Processing](https://github.com/Ewha-Euron/2022-1-Euron-NLP) +### ▶ [Data Analysis](https://github.com/Ewha-Euron/2022-1-Euron-DA) + +## Curriculum + +| 주차 | 날짜 | CV | NLP | DA | +|---|---|---|---|---| +|1|22/03/08|cs231n 1주차|cs224n 1강|파이썬 머신러닝 완벽가이드 1~3장| +|2|22/03/15|cs231n 2주차|cs224n 2강|파이썬 머신러닝 완벽가이드 4장(1)| +|3|22/03/22|cs231n 3주차|cs224n 3강|파이썬 머신러닝 완벽가이드 4장(2)| +|4|22/03/29|cs231n 4주차|cs224n 4강|4장 관련 필사| +|5|22/04/05|cs231n 5주차|cs224n 5강|파이썬 머신러닝 완벽가이드 5장| +|6|22/04/12|cs231n 6주차|cs224n 6강|5장 관련 필사| +|7|22/04/19|cs231n 7주차|cs224n 7강|파이썬 머신러닝 완벽가이드 6장| +|8|22/05/03|cs231n 8주차|cs224n 8강|6장 관련 필사| +|9|22/05/10|cs231n 9주차|cs224n 9강|파이썬 머신러닝 완벽가이드 7장| +|10|22/05/17|cs231n 10주차|cs224n 10강|7장 관련 필사| +|11|22/05/24|cs231n 11주차|cs224n 11강|파이썬 머신러닝 완벽가이드 9장| +|12|22/05/31|cs231n 12주차|cs224n 12강|9장 관련 필사| +|13|22/06/07|cs231n 13주차|cs224n 13강|캐글 필사 1| +|14|22/06/21|cs231n 14주차|cs224n 14강|캐글 필사 2| +|15|22/06/28|논문 스터디 1|cs224n 15강|캐글 필사 2| +|16|22/07/05|논문 스터디 2|cs224n 18강|| +|17|22/07/12|논문 스터디 3|cs224n 20강|| +|18|22/07/19||cs224n 21강|| +|19|22/07/26||cs224n 22강|| From 18ac8eb26c0965bf93658cac522f3d099a8890e9 Mon Sep 17 00:00:00 2001 From: kimsook <40443049+kimsook@users.noreply.github.com> Date: Thu, 7 Jul 2022 23:43:21 +0900 Subject: [PATCH 2/3] =?UTF-8?q?18=EC=A3=BC=EC=B0=A8=20=EC=98=88=EC=8A=B5?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354\212\265\352\263\274\354\240\234.ipynb" | 3222 +++++++++++++++++ 1 file changed, 3222 insertions(+) create mode 100644 "week18_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" diff --git "a/week18_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" "b/week18_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" new file mode 100644 index 0000000..28d1a67 --- /dev/null +++ "b/week18_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" @@ -0,0 +1,3222 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "D4TDEvhv7_od" + }, + "source": [ + "# Autoencoder based Anomaly Detection\n", + "https://dacon.io/competitions/official/235757/codeshare/4641?page=1&dtype=recent\n", + "\n", + "본 코드는 오토인코더 기반의 이상탐지 모델을 활용하였습니다.\n", + "\n", + "Conv1D-LSTM 기반의 Autoencoder 모델을 구현하였으며 구현 시 라이브러리는 tensorflow의 keras를 이용했습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9vGhX84C7_og" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn import metrics\n", + "\n", + "from tqdm.notebook import trange\n", + "from TaPR_pkg import etapr\n", + "from pathlib import Path\n", + "import time\n", + "\n", + "from tensorflow import keras\n", + "from tensorflow.keras import layers\n", + "from tensorflow.keras.models import load_model\n", + "from tensorflow.keras.callbacks import EarlyStopping" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ywtp-GXC7_oi" + }, + "source": [ + "위의 라이브러리를 활용하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "dATg00ye7_oi", + "outputId": "c31eaaf3-552d-487f-f365-96349892c4de" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPython 3.6.11\n", + "IPython 7.16.1\n", + "\n", + "numpy 1.18.5\n", + "matplotlib 3.3.1\n", + "pandas 1.1.2\n", + "sklearn 0.0\n", + "tqdm 4.48.2\n", + "TaPR_pkg unknown\n", + "pathlib 1.0.1\n", + "tensorflow 2.3.0\n" + ] + } + ], + "source": [ + "%reload_ext watermark\n", + "%watermark -v -p numpy,matplotlib,pandas,sklearn,tqdm,TaPR_pkg,pathlib,tensorflow" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bPB_oE0f7_oj" + }, + "source": [ + "위와 같이 tensorflow 버전은 2.0 이상의 버전을 활용하였습니다.\n", + "\n", + "TaPR 패키지는 baseline을 참고해주시면 됩니다.\n", + "\n", + "본 코드에서는 \"eTaPR-1.12-py3-none-any.whl\" 파일을 직접 설치하였습니다.\n", + "\n", + "\"eTaPR-1.12-py3-none-any.whl\"이 존재하는 경로에서\n", + "python -m pip install \"eTaPR-1.12-py3-none-any.whl\"와 같은 명령어를 실행하시면 쉽게 설치할 수 잇습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-EnKiv7c7_ok" + }, + "source": [ + "## 데이터 전처리\n", + "\n", + "학습 데이터와 테스트 데이터는 CSV로 제공됩니다.\n", + "HAI 2.0은 단일 파일이 아니라 여러 파일로 제공되기 때문에 디렉토리 안에 있는 모든 CSV를 읽습니다.\n", + "\n", + "데이터 전처리 및 데이터를 불러오는 방법의 대부분은 baseline의 코드를 참고하였습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZF1az35n7_ok" + }, + "source": [ + "# 1) 데이터 불러오기" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "go247fGg7_ol" + }, + "outputs": [], + "source": [ + "TRAIN_DATASET = sorted([x for x in Path(\"D:\\\\data\\\\HAI 2.0\\\\training\\\\\").glob(\"*.csv\")])\n", + "TRAIN_DATASET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "isWg5xJD7_om" + }, + "outputs": [], + "source": [ + "TEST_DATASET = sorted([x for x in Path(\"D:\\\\data\\\\HAI 2.0\\\\testing\").glob(\"*.csv\")])\n", + "TEST_DATASET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AfgFH9Iu7_on" + }, + "outputs": [], + "source": [ + "VALIDATION_DATASET = sorted([x for x in Path(\"D:\\\\data\\\\HAI 2.0\\\\validation\").glob(\"*.csv\")])\n", + "VALIDATION_DATASET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "O9bmFhuB7_op" + }, + "outputs": [], + "source": [ + "def dataframe_from_csv(target):\n", + " return pd.read_csv(target, engine='python').rename(columns=lambda x: x.strip())\n", + "\n", + "def dataframe_from_csvs(targets):\n", + " return pd.concat([dataframe_from_csv(x) for x in targets])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false, + "id": "-_VLDr4E7_oq", + "outputId": "8dde8777-2266-4080-aabf-514d59e43ba7" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeC01C02C03C04C05C06C07C08C09...C70C71C72C73C74C75C76C77C78C79
02020-07-11 00:00:00395.19528121052.80456-1.2648-1.87531779.5959528.0264510832.0...808.296200.01.368108.7988235.4370012.01782305.03113301.3599233.65556.0951
12020-07-11 00:00:01395.14420121052.78931-1.3147-1.88294780.6732828.0247310984.0...819.168090.01.368108.7881135.4522712.01782304.27161297.4356733.65555.9262
22020-07-11 00:00:02395.14420121052.79694-1.4032-1.88294780.0657428.0281711120.0...823.516970.01.367348.8178735.4522712.01782303.89179298.6653433.65555.8101
32020-07-11 00:00:03395.19528121052.79694-1.6074-1.88294780.1526528.0230111256.0...823.951720.01.367348.8749335.4370012.01782303.67474298.0686033.65555.7509
42020-07-11 00:00:04395.34866121052.79694-1.7811-1.88294781.8316028.0359511384.0...827.865600.01.368108.8383835.4522712.01782303.22266296.5313733.65555.8547
..................................................................
4787962020-08-10 10:59:56387.27219121066.72057-0.9331-1.84479781.8791528.02389880.0...944.847050.01.3284315.1781735.1471011.79657316.89453296.5495032.00006.6026
4787972020-08-10 10:59:57387.52774121066.72057-0.9996-1.84479787.6507028.02385840.0...940.498350.01.3284315.1734435.1318311.79657315.59247296.1516132.00006.3894
4787982020-08-10 10:59:58387.47665121066.72057-1.2560-1.84479788.5025628.03085792.0...935.714720.01.3291915.1644335.1318311.79657313.92865293.4027732.00006.2584
4787992020-08-10 10:59:59387.73221121066.72057-1.4912-1.84479785.8031628.02649752.0...944.847050.01.3284315.0900135.1471011.79657315.61054302.5897232.00006.4150
4788002020-08-10 11:00:00387.52774121066.72057-1.5727-1.84479780.2138128.02476720.0...951.805050.01.3291915.0867235.1471011.79657317.23816309.0096432.00006.6288
\n", + "

921603 rows × 80 columns

\n", + "
" + ], + "text/plain": [ + " time C01 C02 C03 C04 C05 C06 \\\n", + "0 2020-07-11 00:00:00 395.19528 12 10 52.80456 -1.2648 -1.87531 \n", + "1 2020-07-11 00:00:01 395.14420 12 10 52.78931 -1.3147 -1.88294 \n", + "2 2020-07-11 00:00:02 395.14420 12 10 52.79694 -1.4032 -1.88294 \n", + "3 2020-07-11 00:00:03 395.19528 12 10 52.79694 -1.6074 -1.88294 \n", + "4 2020-07-11 00:00:04 395.34866 12 10 52.79694 -1.7811 -1.88294 \n", + "... ... ... ... ... ... ... ... \n", + "478796 2020-08-10 10:59:56 387.27219 12 10 66.72057 -0.9331 -1.84479 \n", + "478797 2020-08-10 10:59:57 387.52774 12 10 66.72057 -0.9996 -1.84479 \n", + "478798 2020-08-10 10:59:58 387.47665 12 10 66.72057 -1.2560 -1.84479 \n", + "478799 2020-08-10 10:59:59 387.73221 12 10 66.72057 -1.4912 -1.84479 \n", + "478800 2020-08-10 11:00:00 387.52774 12 10 66.72057 -1.5727 -1.84479 \n", + "\n", + " C07 C08 C09 ... C70 C71 C72 C73 \\\n", + "0 779.59595 28.02645 10832.0 ... 808.29620 0.0 1.36810 8.79882 \n", + "1 780.67328 28.02473 10984.0 ... 819.16809 0.0 1.36810 8.78811 \n", + "2 780.06574 28.02817 11120.0 ... 823.51697 0.0 1.36734 8.81787 \n", + "3 780.15265 28.02301 11256.0 ... 823.95172 0.0 1.36734 8.87493 \n", + "4 781.83160 28.03595 11384.0 ... 827.86560 0.0 1.36810 8.83838 \n", + "... ... ... ... ... ... ... ... ... \n", + "478796 781.87915 28.02389 880.0 ... 944.84705 0.0 1.32843 15.17817 \n", + "478797 787.65070 28.02385 840.0 ... 940.49835 0.0 1.32843 15.17344 \n", + "478798 788.50256 28.03085 792.0 ... 935.71472 0.0 1.32919 15.16443 \n", + "478799 785.80316 28.02649 752.0 ... 944.84705 0.0 1.32843 15.09001 \n", + "478800 780.21381 28.02476 720.0 ... 951.80505 0.0 1.32919 15.08672 \n", + "\n", + " C74 C75 C76 C77 C78 C79 \n", + "0 35.43700 12.01782 305.03113 301.35992 33.6555 6.0951 \n", + "1 35.45227 12.01782 304.27161 297.43567 33.6555 5.9262 \n", + "2 35.45227 12.01782 303.89179 298.66534 33.6555 5.8101 \n", + "3 35.43700 12.01782 303.67474 298.06860 33.6555 5.7509 \n", + "4 35.45227 12.01782 303.22266 296.53137 33.6555 5.8547 \n", + "... ... ... ... ... ... ... \n", + "478796 35.14710 11.79657 316.89453 296.54950 32.0000 6.6026 \n", + "478797 35.13183 11.79657 315.59247 296.15161 32.0000 6.3894 \n", + "478798 35.13183 11.79657 313.92865 293.40277 32.0000 6.2584 \n", + "478799 35.14710 11.79657 315.61054 302.58972 32.0000 6.4150 \n", + "478800 35.14710 11.79657 317.23816 309.00964 32.0000 6.6288 \n", + "\n", + "[921603 rows x 80 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "TRAIN_DF_RAW = dataframe_from_csvs(TRAIN_DATASET)\n", + "TRAIN_DF_RAW" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lF5jv6VF7_os" + }, + "source": [ + "# 2) 변수 설정" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UxRPRM627_ou" + }, + "source": [ + "그 다음은 baseline과 동일하게 필드명을 활용하였습니다.\n", + "\n", + "\n", + "\n", + "학습 데이터셋은 공격을 받지 않은 평상시 데이터이고 시간을 나타내는 필드인 time이 있으며, 나머지 필드는 모두 비식별화된 센서/액추에이터의 값입니다. 정규화는 센서/액추에이터 필드만을 대상으로 해야 합니다.\n", + "\n", + "본 문서에서는 전체 데이터를 대상으로 이상을 탐지하므로 \"attack\" 필드만 사용하였습니다.\n", + "\n", + "VALID_COLUMNS_IN_TRAIN_DATASET은 학습 데이터셋에 있는 모든 센서/액추에이터 필드를 담고 있습니다. 가끔 학습 데이터셋에 존재하지 않는 필드가 테스트 데이터셋에 존재하는 경우가 있습니다. 학습 시 보지 못했던 필드에 대해서 테스트를 할 수 없으므로 학습 데이터셋을 기준으로 필드 이름을 얻어냈습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "LgsKguip7_ou", + "outputId": "7594ca7f-68e3-4489-a544-09e6574f4248" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['C01', 'C02', 'C03', 'C04', 'C05', 'C06', 'C07', 'C08', 'C09', 'C10',\n", + " 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20',\n", + " 'C21', 'C22', 'C23', 'C24', 'C25', 'C26', 'C27', 'C28', 'C29', 'C30',\n", + " 'C31', 'C32', 'C33', 'C34', 'C35', 'C36', 'C37', 'C38', 'C39', 'C40',\n", + " 'C41', 'C42', 'C43', 'C44', 'C45', 'C46', 'C47', 'C48', 'C49', 'C50',\n", + " 'C51', 'C52', 'C53', 'C54', 'C55', 'C56', 'C57', 'C58', 'C59', 'C60',\n", + " 'C61', 'C62', 'C63', 'C64', 'C65', 'C66', 'C67', 'C68', 'C69', 'C70',\n", + " 'C71', 'C72', 'C73', 'C74', 'C75', 'C76', 'C77', 'C78', 'C79'],\n", + " dtype='object')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "TIMESTAMP_FIELD = \"time\"\n", + "IDSTAMP_FIELD = 'id'\n", + "ATTACK_FIELD = \"attack\"\n", + "VALID_COLUMNS_IN_TRAIN_DATASET = TRAIN_DF_RAW.columns.drop([TIMESTAMP_FIELD])\n", + "VALID_COLUMNS_IN_TRAIN_DATASET" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rDO22kXQ7_ov" + }, + "source": [ + "# 3) 데이터 정규화" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E36pbLyB7_ow" + }, + "source": [ + "본 연구에서도 normalize 함수를 통해 데이터를 정규화 합니다.\n", + "정규화 방법은 min_max 정규화로 최댓값과 최솟값을 이용하여 0~1의 범위에 들어오도록 하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z7R_JKS87_ow" + }, + "outputs": [], + "source": [ + "TAG_MIN = TRAIN_DF_RAW[VALID_COLUMNS_IN_TRAIN_DATASET].min()\n", + "TAG_MAX = TRAIN_DF_RAW[VALID_COLUMNS_IN_TRAIN_DATASET].max()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wdI3MHAx7_ox" + }, + "outputs": [], + "source": [ + "def normalize(df):\n", + " ndf = df.copy()\n", + " for c in df.columns:\n", + " if TAG_MIN[c] == TAG_MAX[c]:\n", + " ndf[c] = df[c] - TAG_MIN[c]\n", + " else:\n", + " ndf[c] = (df[c] - TAG_MIN[c]) / (TAG_MAX[c] - TAG_MIN[c])\n", + " return ndf" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oyFm15Rz7_oy" + }, + "source": [ + "먼저 train data set을 정규화 하고 boundary_check 함수를 통해 정규화가 잘 되었는지 점검합니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OBSa9E2n7_oy" + }, + "outputs": [], + "source": [ + "TRAIN_DF = normalize(TRAIN_DF_RAW[VALID_COLUMNS_IN_TRAIN_DATASET])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YqFEfHFH7_oy" + }, + "outputs": [], + "source": [ + "def boundary_check(df):\n", + " x = np.array(df, dtype=np.float32)\n", + " print(x)\n", + " return np.any(x > 1.0), np.any(x < 0), np.any(np.isnan(x))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false, + "id": "3ZBe9-I67_oz", + "outputId": "8235eade-6552-455f-ca88-9e4440cc4932" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.37895253 0. 0. ... 0.2650172 1. 0.5672542 ]\n", + " [0.37845883 0. 0. ... 0.2504694 1. 0.5066231 ]\n", + " [0.37845883 0. 0. ... 0.25502798 1. 0.46494597]\n", + " ...\n", + " [0.30434805 0. 0. ... 0.23551878 0.26161984 0.625875 ]\n", + " [0.3068182 0. 0. ... 0.26957628 0.26161984 0.6820907 ]\n", + " [0.30484188 0. 0. ... 0.29337597 0.26161984 0.7588398 ]]\n" + ] + }, + { + "data": { + "text/plain": [ + "(False, False, False)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boundary_check(TRAIN_DF)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P8ou_fGT7_oz" + }, + "source": [ + "# 학습 모델 설정\n", + "\n", + "모델 구현 라이브러리는 keras를 사용하였습니다.\n", + "\n", + "본 챌린지의 핵심은 정상 상황의 데이터만을 학습하여 공격 및 비정상 상황을 탐지하는 것입니다.\n", + "\n", + "Autoencoder의 경우 보통 이미지의 생성이나 복원에 많이 사용되며, 정상적인 이미지로 모델 학습 후 비정상적인 이미지를 넣어 이를 디코딩 하게 되면 정상 이미지 특성과 디코딩 된 이미지 간의 차이인 재구성 손실(Reconstruction Error)를 계산하게 됩니다. 이 재구성 손실이 낮은 부분은 정상(normal), 재구성 손실이 높은 부분은 이상(Abnormal)로 판단할 수 있습니다.\n", + "\n", + "본 연구에서는 이러한 Anomaly Detection 방법을 이미지가 아닌 시계열 데이터에 적용하였습니다.\n", + "\n", + "Autoencoder의 레이어를 LSTM으로 구성하여 시퀸스 학습이 가능하게 하였습니다.\n", + "또한, !D-Convolution layer를 적용하여 timestamp와 feature 정보를 세밀하게 이동하면서 학습이 진행되도록 하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CgoXMTJe7_o0" + }, + "outputs": [], + "source": [ + "def temporalize(X, y, timesteps):\n", + " output_X = []\n", + " output_y = []\n", + " for i in range(len(X) - timesteps - 1):\n", + " t = []\n", + " for j in range(1, timesteps + 1):\n", + " t.append(X[[(i + j + 1)], :])\n", + " output_X.append(t)\n", + " output_y.append(y[i + timesteps + 1])\n", + " return np.squeeze(np.array(output_X)), np.array(output_y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "31v922Pg7_o0" + }, + "source": [ + "위의 함수를 통해서 데이터 셋 자체를 timestamp로 나누어서 학습을 진행할 수 있지만,\n", + "Conv1D 레이어를 활용하였기 때문에 timestamp는 1로 두고 3 차원의 shpae 형태로 만들어 주었습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ztVrNPOs7_o0", + "outputId": "4a266c56-c3dd-4df8-95dd-e9f147262705" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(921603, 1, 79)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train = np.array(TRAIN_DF)\n", + "x_train = train.reshape(train.shape[0], 1, train.shape[1])\n", + "x_train.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T4anF-bV7_o1" + }, + "source": [ + "# 학습 모델의 구조\n", + "\n", + "파라미터 설명\n", + "\n", + "Conv1D\n", + "- filters : 컨볼루션 연산의 output 출력 수\n", + "- kernel_size : timestamp를 얼마만큼 볼 것인가(=window_size)\n", + "- padding : 한 쪽 방향으로 얼마만큼 padding할 것인가\n", + "- dilation: kernel 내부에서 얼마만큼의 간격으로 kernel을 적용할 것인가\n", + "- stride: default = 1, 컨볼루션 레이어의 이동크기\n", + "\n", + "LSTM\n", + "- unit: 출력 차원층만 설정" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YDhbDsQu7_o1" + }, + "source": [ + "모델의 구조는 Conv1D - Dense층 - LSTM - Dense층으로 encoder 와 decoder가 대칭이 되도록 설계하였습니다.\n", + "파라미터는 주로 filters, kernel_size, Dense, LSTM의 units 값을 조절하면서 실험을 진행하였습니다.\n", + "파라미터 값을 수정하면서 많은 실험을 진행하였지만 다음과 같은 모델의 결과가 가장 좋았습니다.\n", + "\n", + "추가적으로 Conv1D 레이어를 추가하거나 maxpooling과 같이 기존의 CNN 모델과 동일한 방식을 적용할 수 있습니다.\n", + "\n", + "제가 실험을 할 때는 pooling을 적용하지 않는 것이 결과가 좋았지만 모델을 테스트 해보실 분들은 다양하게 \n", + "레이어와 파라미터 값을 조절 하면서 해보시면 좋을 것 같습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "uBcEfGAV7_o2" + }, + "outputs": [], + "source": [ + "def conv_auto_model(x):\n", + " n_steps = x.shape[1]\n", + " n_features = x.shape[2]\n", + "\n", + " keras.backend.clear_session()\n", + "\n", + " model = keras.Sequential(\n", + " [\n", + " layers.Input(shape=(n_steps, n_features)),\n", + " layers.Conv1D(filters=512, kernel_size=64, padding='same', data_format='channels_last',\n", + " dilation_rate=1, activation=\"linear\"),\n", + " layers.Dense(128),\n", + " layers.LSTM(\n", + " units=64, activation=\"relu\", name=\"lstm_1\", return_sequences=False\n", + " ),\n", + " layers.Dense(64),\n", + " layers.RepeatVector(n_steps),\n", + " layers.Dense(64),\n", + " layers.LSTM(\n", + " units=64, activation=\"relu\", name=\"lstm_2\", return_sequences=True\n", + " ),\n", + " layers.Dense(128),\n", + " layers.Conv1D(filters=512, kernel_size=64, padding='same', data_format='channels_last',\n", + " dilation_rate=1, activation=\"linear\"),\n", + " layers.TimeDistributed(layers.Dense(x.shape[2], activation='linear'))\n", + " ]\n", + " )\n", + " return model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e7c19iQx7_o3" + }, + "source": [ + "# 모델 구조 확인" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Ab15qFLg7_o3", + "outputId": "a00193d2-96aa-4e73-a592-53dbd6ecacd9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "conv1d (Conv1D) (None, 1, 512) 2589184 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1, 128) 65664 \n", + "_________________________________________________________________\n", + "lstm_1 (LSTM) (None, 64) 49408 \n", + "_________________________________________________________________\n", + "dense_1 (Dense) (None, 64) 4160 \n", + "_________________________________________________________________\n", + "repeat_vector (RepeatVector) (None, 1, 64) 0 \n", + "_________________________________________________________________\n", + "dense_2 (Dense) (None, 1, 64) 4160 \n", + "_________________________________________________________________\n", + "lstm_2 (LSTM) (None, 1, 64) 33024 \n", + "_________________________________________________________________\n", + "dense_3 (Dense) (None, 1, 128) 8320 \n", + "_________________________________________________________________\n", + "conv1d_1 (Conv1D) (None, 1, 512) 4194816 \n", + "_________________________________________________________________\n", + "time_distributed (TimeDistri (None, 1, 79) 40527 \n", + "=================================================================\n", + "Total params: 6,989,263\n", + "Trainable params: 6,989,263\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model = conv_auto_model(x_train)\n", + "model.compile(optimizer='adam', loss='mse')\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "q4gUhyhA7_o4" + }, + "source": [ + "# 모델 학습하기\n", + "epoch을 50으로 하고, earlystopping을 사용하였습니다.\n", + "제출 코드에서는 예시로 에폭을 3회만 실시 하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vhN7gMAx7_o4", + "outputId": "8821d670-5b64-4331-b01b-200c5fd5360f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 737282 samples, validate on 184321 samples\n", + "Epoch 1/3\n", + "737282/737282 [==============================] - 401s 544us/sample - loss: 0.0020 - val_loss: 3.2852e-04\n", + "Epoch 2/3\n", + "737282/737282 [==============================] - 401s 544us/sample - loss: 1.4245e-04 - val_loss: 3.2397e-04\n", + "Epoch 3/3\n", + "737282/737282 [==============================] - 390s 529us/sample - loss: 8.5787e-05 - val_loss: 2.5324e-04\n" + ] + } + ], + "source": [ + "early_stopping = EarlyStopping(monitor='val_loss', patience=5)\n", + "\n", + "epochs = 3\n", + "batch = 64\n", + "\n", + "# fit\n", + "history = model.fit(x_train, x_train,\n", + " epochs=epochs, batch_size=batch,\n", + " validation_split=0.2, callbacks=[early_stopping]).history\n", + "\n", + "model.save('model.h5')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "HTTxx_SR7_o5", + "outputId": "df3e8d42-72dc-4b89-e21e-1de301aab6fb" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(history['loss'], label='train loss')\n", + "plt.plot(history['val_loss'], label='valid loss')\n", + "plt.legend()\n", + "plt.xlabel('Epoch'); plt.ylabel('loss')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9xP_ovAk7_o5" + }, + "source": [ + "# 학습된 모델 불러오기" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JZ-gmHGw7_o6" + }, + "source": [ + "기존의 학습된 모델 중 가장 결과가 좋았던 모델을 불러와서 결과를 확인해보도록 하겠습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "G6TeZ0l37_o6" + }, + "outputs": [], + "source": [ + "model = load_model('best_model.h5')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e_NxtYZV7_o6" + }, + "source": [ + "# 학습된 모델을 검증 데이터셋에 적용하여 이상 탐지" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "1Ppn5xIp7_o6", + "outputId": "080003ce-118b-4b5f-c16c-15d21003c6aa" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeC01C02C03C04C05C06C07C08C09...C71C72C73C74C75C76C77C78C79attack
02020-07-07 15:00:00402.7094712.01051.95007-1.0189-1.86768789.7650828.03162688...0.01.3429310.8929034.8877012.26196380.31683386.2666632.595275.63300
12020-07-07 15:00:01402.8117412.01051.96533-1.2637-1.86768789.1314728.02301648...0.01.3421610.8051234.8877012.26196380.02747386.3028632.595275.41580
22020-07-07 15:00:02402.7606212.01051.96533-1.5398-1.86768785.8165328.02993616...0.01.3436910.8002934.8877012.26196381.52850389.7388332.595275.55320
32020-07-07 15:00:03402.8117412.01051.98822-1.6212-1.86768785.4243828.02993584...0.01.3444510.8057934.8877012.26196382.08911388.9431132.595275.78330
42020-07-07 15:00:04402.9139412.01051.90429-1.5631-1.86768782.9924928.02990552...0.01.3429310.8141534.9029512.26196383.44543389.7208232.595276.03090
..................................................................
431962020-07-08 02:59:56397.0866112.01066.58325-1.2052-1.83716786.9373828.032500...0.01.3597116.1949635.2233812.01019390.13672394.9110731.816345.29770
431972020-07-08 02:59:57397.1888712.01066.58325-0.9256-1.83716783.4498928.023040...0.01.3597116.2392735.2386412.01019390.24518397.3524831.816345.31880
431982020-07-08 02:59:58397.1377612.01066.58325-0.7843-1.83716784.8678028.028140...0.01.3581816.2067535.2386412.01019390.46222396.7014231.816345.18000
431992020-07-08 02:59:59397.3422212.01066.58325-0.7646-1.83716785.5141628.022940...0.01.3581816.1716835.2539112.01019391.78241397.7321831.816344.87630
432002020-07-08 03:00:00397.4955712.01066.58325-0.9083-1.83716786.9829728.029900...0.01.3589516.1041235.2233812.01019391.31219397.2439031.816344.57900
\n", + "

43201 rows × 81 columns

\n", + "
" + ], + "text/plain": [ + " time C01 C02 C03 C04 C05 C06 \\\n", + "0 2020-07-07 15:00:00 402.70947 12.0 10 51.95007 -1.0189 -1.86768 \n", + "1 2020-07-07 15:00:01 402.81174 12.0 10 51.96533 -1.2637 -1.86768 \n", + "2 2020-07-07 15:00:02 402.76062 12.0 10 51.96533 -1.5398 -1.86768 \n", + "3 2020-07-07 15:00:03 402.81174 12.0 10 51.98822 -1.6212 -1.86768 \n", + "4 2020-07-07 15:00:04 402.91394 12.0 10 51.90429 -1.5631 -1.86768 \n", + "... ... ... ... ... ... ... ... \n", + "43196 2020-07-08 02:59:56 397.08661 12.0 10 66.58325 -1.2052 -1.83716 \n", + "43197 2020-07-08 02:59:57 397.18887 12.0 10 66.58325 -0.9256 -1.83716 \n", + "43198 2020-07-08 02:59:58 397.13776 12.0 10 66.58325 -0.7843 -1.83716 \n", + "43199 2020-07-08 02:59:59 397.34222 12.0 10 66.58325 -0.7646 -1.83716 \n", + "43200 2020-07-08 03:00:00 397.49557 12.0 10 66.58325 -0.9083 -1.83716 \n", + "\n", + " C07 C08 C09 ... C71 C72 C73 C74 \\\n", + "0 789.76508 28.03162 688 ... 0.0 1.34293 10.89290 34.88770 \n", + "1 789.13147 28.02301 648 ... 0.0 1.34216 10.80512 34.88770 \n", + "2 785.81653 28.02993 616 ... 0.0 1.34369 10.80029 34.88770 \n", + "3 785.42438 28.02993 584 ... 0.0 1.34445 10.80579 34.88770 \n", + "4 782.99249 28.02990 552 ... 0.0 1.34293 10.81415 34.90295 \n", + "... ... ... ... ... ... ... ... ... \n", + "43196 786.93738 28.03250 0 ... 0.0 1.35971 16.19496 35.22338 \n", + "43197 783.44989 28.02304 0 ... 0.0 1.35971 16.23927 35.23864 \n", + "43198 784.86780 28.02814 0 ... 0.0 1.35818 16.20675 35.23864 \n", + "43199 785.51416 28.02294 0 ... 0.0 1.35818 16.17168 35.25391 \n", + "43200 786.98297 28.02990 0 ... 0.0 1.35895 16.10412 35.22338 \n", + "\n", + " C75 C76 C77 C78 C79 attack \n", + "0 12.26196 380.31683 386.26666 32.59527 5.6330 0 \n", + "1 12.26196 380.02747 386.30286 32.59527 5.4158 0 \n", + "2 12.26196 381.52850 389.73883 32.59527 5.5532 0 \n", + "3 12.26196 382.08911 388.94311 32.59527 5.7833 0 \n", + "4 12.26196 383.44543 389.72082 32.59527 6.0309 0 \n", + "... ... ... ... ... ... ... \n", + "43196 12.01019 390.13672 394.91107 31.81634 5.2977 0 \n", + "43197 12.01019 390.24518 397.35248 31.81634 5.3188 0 \n", + "43198 12.01019 390.46222 396.70142 31.81634 5.1800 0 \n", + "43199 12.01019 391.78241 397.73218 31.81634 4.8763 0 \n", + "43200 12.01019 391.31219 397.24390 31.81634 4.5790 0 \n", + "\n", + "[43201 rows x 81 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "VALIDATION_DF_RAW = dataframe_from_csvs(VALIDATION_DATASET)\n", + "VALIDATION_DF_RAW.to_csv('VALIDATION_DF_RAW.csv')\n", + "VALIDATION_DF_RAW" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SqcW-PoT7_o7" + }, + "source": [ + "검증 데이터 셋에서는 정상 데이터를 기준으로 정규화를 진행합니다.\n", + "그리고, 최솟값과 최댓값을 넘어가는 것이 있는지 확인합니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zfv2ftBx7_o7" + }, + "outputs": [], + "source": [ + "VALIDATION_DF = normalize(VALIDATION_DF_RAW[VALID_COLUMNS_IN_TRAIN_DATASET])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KLvyCZY67_o8", + "outputId": "07089e22-3ab7-4c56-b7a6-86c4e5cb86a5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.45158097 0. 0. ... 0.5797802 0.52712005 0.4013713 ]\n", + " [0.45256948 0. 0. ... 0.5799144 0.52712005 0.32340166]\n", + " [0.45207536 0. 0. ... 0.5926521 0.52712005 0.37272498]\n", + " ...\n", + " [0.39772758 0. 0. ... 0.6184636 0.17970447 0.23875508]\n", + " [0.3997038 0. 0. ... 0.62228477 0.17970447 0.129734 ]\n", + " [0.401186 0. 0. ... 0.62047464 0.17970447 0.02301037]]\n" + ] + }, + { + "data": { + "text/plain": [ + "(True, True, False)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boundary_check(VALIDATION_DF)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xjZ24UIc7_o8" + }, + "source": [ + "그래프로 시각화를 하여 보았을 때도 일정 구간에서 0과 1 범위를 벗어나는 것을 확인할 수 있습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "VC9tdNq37_o8", + "outputId": "c566e3c6-0c27-4896-db75-30f99e83fbd9" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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tUJEpHIMciIilWOQExGpHIOciEjlGORERCrHICciUjkGORGRAq7W2Do9+uij8PPzc8sMPI6ciEgmZ43t9OnT8dFHHwEAfvrpp44a23379kEIgaFDh2LSpEkIDg4GAOzbtw+1tbVum4MrciIimeTU2NpsNjz99NP461//6rY5uCInItUrX7AA5mz31tgak5MQ8dxz572PnBrbZcuWYdKkSYiMjHTbrD0myDurlSQi8oSuamxLS0vxz3/+84xmRHfoMUFORL9c3a2cPcXVGtsff/wRubm5SEhIAAA0NzcjISGhoxFRLrftIxdCaIUQPwohNrtrm0RElzJXa2zHjx+P8vJyFBQUoKCgAD4+PopDHHDvm51zAGS7cXtERJc0Z43ttm3b0K9fP6SmpuLFF19EVFRUR43t8OHDO2psPcUtu1aEEDEAxgP4C4An3LFNIiI1cKXG9myNjY1umcFdK/LFAH4PwN7VHYQQDwkh9gkh9p08edJNT0tERIqDXAgxAcAJSZL2n+9+kiT9P0mShkmSNKx3795Kn5aIiNq5Y0U+EsAkIUQBgI8AjBFC/MMN23UvHn1IRL9QioNckqQ/SJIUI0lSPIC7AOyQJOn/FE9GREQXhKfoExGpnFtPCJIk6SsAX7lzm0REdH5ckRMRKeBqje3999+PPn36YMiQIRgyZAh++uknxTPwFH0iIpnk1ti++uqrmDx5stvm4IqciEgmOTW2nsAVORGp3rcfH0FlkXvOknQKNflh1JT+572PnBpbAPjjH/+Il156Cddffz1efvllGI1GRbNyRU5E5GZd1dgCwMKFC5GTk4O9e/eiuroar7zyiuLn44qciFSvu5Wzp7haYwug44ISRqMRM2bMwGuvvaZ4Dq7IiYhkcrXGFgDKysoAOFbtGzduxMCBAxXPwRU5EZFMzhrbxx57DC+//DK8vLwQHx+PxYsXd9TYAjijxvaee+7ByZMnIUkShgwZguXLlyueg0FORKSAqzW2O3bscPsM3LVCRKRyPSbIee1lIvql6jFBTkT0S8UgJyJSOQY5EZHKMciJiFSOQU5EpICrNbaSJOGPf/wj+vfvj+TkZPztb39TPAOPIycikklOje2qVatQVFSEnJwcaDQanDhxQvEcPWhFzuMPici95NTYvv3223jhhReg0TjiNywsTPEcXJETkertXPX/cKIw363bDIvri+vuf+i895FTY5uXl4d169bh3//+N3r37o2//e1vSExMVDRrD1qRExH9PM5XY2s2m+Hl5YV9+/bh17/+daen8buKK3IiUr3uVs6eIqfGNiYmBnfccQcA4LbbbsOMGTMUz9FzVuRWy8WegIh+YeTU2N56660dxVlff/01+vdX3qXec1bk1paLPQER/cLIqbF99tlncc899+CNN96An58fVqxYoXiOnhPk9ItX/Oy3AIDoBb+C0IiLPA31FK7W2AYFBeGzzz5z6ww9ZtcK2w97Dsliu9gjEP2sekyQUw/CH9rUw/ScIOeSvOew89+aepaeE+TkMQs/z8ZvP/zfxR6jA39mU0/DICfF3vk6H59llF3sMU5hklMPwyCnXx7mOPUwioNcCGESQuwUQmQLIQ4JIea4YzAi2bgip5+RqzW2o0aNwpAhQzBkyBBERUXh1ltvVTyDO44jtwJ4UpKk/wkh/AHsF0JskyQpyw3bJnKZZL/YE1BPIafG9ttvv+14/B133IFbbrlF8RyKV+SSJJVJkvS/9o8bAGQDiFa6XbfjKq3n4FEr9DORU2Pr1NDQgB07dlwyK/IOQoh4AJcB+L6Tzz0E4CEAiI2NdefTXiB+c/cY/KHd49R+moe20ia3btMQ5Yugif3Oex85NbZO//73v3H99dcjICBA8axue7NTCOEH4F8AHpMkqf7sz0uS9P8kSRomSdKw3r17u+tpLxy/uXsMiStyusjOV2PrtHbtWtx9991ueT63rMiFEHo4QvwDSZI2uGOb3aksbsRnbx1AZL8g3DgjpaNb49C3JTieVY2xvxmExhozDn5djCsn9uGO056EOd7jdLdy9hQ5NbYAUFVVhR9++AH//ve/3TKH4iAXjh8zfweQLUnSIuUjdW376mzk7DrzeOWj1RU4urfinPu++fCOjo//959CT45FlxquyOlnMmbMGDz33HN499138etf/xrAuTW2APDFF19g4cKFHY/75z//iQkTJsDLy8stc7hj18pIAPcCGCOE+Kn9f+PcsN1z5P1P+UVK6ZePe9Ho5+Kssd22bRv69euH1NRUvPjii4iKiuqosR0+fPgZNbYA8NFHH7lttwrghhW5JEn/BfCzdIY++PooHNlbgYr8emR+43jjICw+ANVlTbCaTzXeJV0dieqSRpwobAAAePvrERCsRcXxVgTpy3+OUeli4oqc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pVhjewpX5EREKscgJyJSOQY5EZHKMciJiFSOQU5EpHIMciIilWOQExEp4GqN7SeffOKfkpKSnJSUlDJ06NABmZmZRqUzMMiJiGRy1tiOHj26oaioKDMvL+/QwoULS5w1tu+88845zYZz5syJ+8c//nEsJycn684776yeO3dupNI52LVCRCST3Brb2tpaLQDU1dVpIyMjLUrnYJATkept3LjRdOLECbfW2IaFhTXfeuutbq+xXb58ecHtt9+eaDQa7X5+fra9e/dmK5uUu1aIiH5WixYtCt+wYcPRioqKjGnTplU+8sgjJqXb5IqciFSvu5Wzp7haY1taWqrLzs72HjNmTBMA3HfffTXp6emJSufgipyISCZXa2x79+5tbWxs1GZkZBgBYPPmzQEJCQmtSufgipyISCZnje2sWbNMixcvjjAajVJMTIx56dKlRUOHDh2Qn5/v1dLSog0PD0976623Cu644476JUuWFE6ePLmfEAKBgYG2VatWKb5mJ2tsiUiVWGN7CnetEBGpHIOciEjlGORERCrHICciUjkGORGRyjHIiYhUjkFORKSAqzW2mzZt8k9JSUlOTExMvf322+MtFsWdWQxyIiK5XK2xtdlseOihh/p89NFH+UePHj0UGxvbtmzZstCutn+hGORERDJ1VWObnp7eeMsttzQEBATYT79/RUWFzmAw2NPS0swAkJ6eXr9x48YgpXPwFH0iUr2s7GdMTY1H3Fpj6+vXvzkl+RW31thGRERYrVar+Oabb3xGjx7dvG7duuCysjKD0lm5Iici+ploNBqsXr06//HHHzcNGjQo2d/f36bVahVvlytyIlK97lbOnuJqjS0A3HDDDU379+8/DAAbNmwIyM3N9VI6B1fkREQyuVpjCwAlJSU6AGhpaRGvvvpqxMMPP3yyq/teKAY5EZFMzhrb7du3B5hMpoEJCQmpc+fOjYqNjbUMHTp0wL333tt39+7dAeHh4Wn/+te/AgDgpZdeiujbt29qcnJy6tixY2snTZrUoHQO1tgSkSqxxvYUrsiJiFSOQU5EpHIMciIilWOQExGpHIOciEjlGORERCrHICciUqCzGtudO3f6DBkyJCkhISG1f//+Ke+++27H2Z85OTmGtLS0pLi4uIHjx4/v29raKpTOwCAnIpKpqxrb5uZmzZo1a47l5uYe+uKLL44+99xzpsrK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ZNq0aW7ZrQKwxpaIVIo1tqdwRU5EpHIMciIilWOQExGpHIOciEjlGORERCrHICciUjkGORGRAq7W2H7yySf+KSkpyUlJSSlDhw4dkJmZaVQ6A4OciEgmZ43t6NGjG4qKijLz8vIOLVy4sKS5uVmzZs2aY7m5uYe++OKLo88995ypsrJSCwBz5syJ+8c//nEsJycn684776yeO3dupNI52LVCRCST3Brb2tpaLQDU1dVpIyMjLUrnYJATkept3LjRdOLECbfW2IaFhTXfeuutbq+xXb58ecHtt9+eaDQa7X5+fra9e/dmK52Vu1aIiDyksxrbRYsWhW/YsOFoRUVFxrRp0yofeeQRk9Ln4YqciFSvu5Wzp7haY1taWqrLzs72HjNmTBMA3HfffTXp6emJSufgipyISCZXa2x79+5tbWxs1GZkZBgBYPPmzQEJCQmtSufgipyISCZnje2sWbNMixcvjjAajVJMTIx5+PDhTXv37vWrqanRffjhh6EAsHLlymNXX311y5IlSwonT57cTwiBwMBA26pVqxRfs5M1tkSkSqyxPYW7VoiIVI5BTkSkcgxyIiKVY5ATEakcg5yISOUY5EREKscgJyJSwNUa202bNvmnpKQkJyYmpt5+++3xFoviziwGORGRXK7W2NpsNjz00EN9Pvroo/yjR48eio2NbVu2bFlo9890fgxyIiKZuqqxHT9+fOOgQYPMwJk1thUVFTqDwWBPS0szA0B6enr9xo0bg5TOwVP0iUj1srKfMTU1HnFrja2vX//mlORX3FpjK4SA1WoV33zzjc/o0aOb161bF1xWVmZQOitX5EREHnJ2ja1Go8Hq1avzH3/8cdOgQYOS/f39bc56WyW4Iici1etu5ewprtbYAsANN9zQtH///sMAsGHDhoDc3FwvpXNwRU5EJJOrNbYAUFJSogOAlpYW8eqrr0Y8/PDDJ8/erqu4IicikklOje1LL70UsW3btkC73S5mzpx5YtKkSQ1K52CNLRGpEmtsT+GuFSIilWOQExGpHIOciEjlGORERCrHICciUjkGORGRyjHIiYgU6KzG9rPPPvNLTU1NTkpKSklISEj961//2tt5/5ycHENaWlpSXFzcwPHjx/dtbW0VSmdgkBMRydRVjS0A7Nu3LycnJydr//792UuWLIkoKCjQA8ATTzwRM3v27IrCwsLMwMBA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Yx/5J598EpSYmNiqdA6uyImIZHLW2M6aNcu0ePHiCKPRKMXExJiXLl3a6W8IkiThvvvu69PY2KiRJEkkJyc3r1q1qlDpHKyxJSJVYo3tKdy1QkSkcgxyIiKVY5ATEakcg5yISOUY5EREKscgJyJSOQY5EZECrtbYOk2fPt3k4+NzmTtmYJATEckkp8YWAL755hufuro6t52QySAnIpKpqxrb9PT0RmeN7Y033lh/+mOsViuefvrpmCVLlihuPXTiKfpEpHqlz/3RZD561K01tsbExOaoBX9xe43twoULw8aNG1cbFxfXaTOiHAxyIiI366rGtqCgQL9x48bgPXv2HHbn8zHIiUj1uls5e4qrNbajR49uLCws9IqPjx8EAK2trZrY2NiBx48fz1QyB0uziEiVLoXSLLvdjiFDhiRNnz698sknn6wEHDW2jY2NmvHjxzcCwN/+9rde+/bt8129evXxsx/v4+NzWXNz84+dbZulWUREPwNnje327dsDTCbTwISEhNS5c+dGxcbGum3/94XgipyIVOlSWJF7ElfkREQ9CIOciEjlGORERCrHICciUjkGORGRyjHIiYhUjkFORKSAqzW2d9xxR3x0dPSgpKSklKSkpJRdu3Z5K52Bp+gTEcnkrLGdNm1a1ebNm/MBYNeuXd6lpaX6tLQ0c1c1tvPnzy+eMWNGjbvmYJATEcnUVY0tADhrbG+66aa6ffv2+XpyDgY5Eane9tXZpuqSRrfW2IZE+zVff1+y22tsAWDevHnRCxcujBw1alTDsmXLir29vRWdYs995EREbtZVjS0ALFq0qCQ/Pz/zwIED2TU1Ndrnn38+QunzcUVORKrX3crZU1ytsX3rrbdKnBeU8Pb2lmbOnFn1+uuvhyudgytyIiKZJk6c2NDW1iZef/31UOdtX3/9tc9vfvObk2VlZQdLSkoOzps3r/j222+veuutt0oAoLCwUA843ijdsGFDUHJycovSObgiJyKSyVljO2vWLNPixYsjjEajFBMTY166dGmXvyFMnTq1T3V1tU6SJJGSktK8evXqQqVzsMaWiFSJNbancNcKEZHKMciJiFSOQU5EpHIMciIilWOQExGpHIOciEjlGORERAq4WmNrt9vx6KOPRsfHxw/s27dv6vz588OUzsATgoiIZJJTY7t06dJexcXF+ry8vEytVouSkhLFOcwg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amo84tYaW1+//s0pya+4tcY2IiLCarVaxTfffOMzevTo5nXr1gWXlZUZlM7KICci8oDc3NyM+Ph4S1ZWluHGG28ccPnll7ekpqaaV69enf/444+b2traNNddd12dVqtV/FwMciJSve5Wzp7iao1tamqq+YYbbmjav3//YQDYsGFDQG5urpfSObiPnIhIJldrbAGgpKREBwAtLS3i1VdfjXj44YdPdr71C8cVORGRTHJqbF966aWIbdu2BdrtdjFz5swTkyZNalA6B2tsiUiVWGN7CnetEBGpHIOciEjlGORERCrHICciUjkGORGRyjHIiYhUjkFORKRAVzW2R48eNYwcOTKxb9++qf369Us9fPiwAQBycnIMaWlpSXFxcQPHjx/ft7W1VSidgUFORCTT+Wps77nnnj5PPfVURX5+/qH//e9/2VFRUVYAeOKJJ2Jmz55dUVhYmBkYGGhdsmQJa2yJiC6Wrmpse/fubbXZbLjtttvqASAwMNDu7+9vt9vt2L17t/+MGTNqAGDmzJlVn376aZDSOXiKPhGp3mPZx005Ta1urbFN8vVqXpwcK6vGNisryysgIMB200039SsqKjKOHj26/s033yw+efKkzt/f36bX6wEA8fHxbRUVFYprbLkiJyJyM6vVKvbt2+e3ePHiooyMjKyCggLj0qVLQzurRBFCKO5J4YqciFSvu5Wzp3RVYxsbG9uWnJzckpKS0gYAkyZNqtmzZ4/fnDlzKhsaGrQWiwV6vR4FBQWGsLAwxRft5IqciEimrmpsW1tbRV1dnba0tFQHADt37gxISUlp0Wg0GDFiRMN7770XDAArV67sNWHChFqlc7D9kIhU6VJpPywoKNDPmjXLdPDgQR9nje3SpUuLcnNzjc8880wMAAwaNKj5gw8+KPTy8pKysrIMU6dO7VdXV6dNTU1t3rBhwzFvb+9zgtiV9kMGORGp0qUS5J7CGlsioh6EQU5EpHIMciIilWOQExGpHIOciEjlGORERCrHICciUsDVGtsFCxb0jo2NHSiEGFpWVuaWs+sZ5EREMsmpsb3mmmsat23bdiQqKqrNXXOwa4WISKauamz379/vdXaNrfPzI0eObHH3HAxyIlK9p9cfMB0pb3BrjW3/CP/mVycPdmuNrU7nmcjlrhUiIjfrqsbWU8/HFTkRqV53K2dPcbXG1lNzcEVORCST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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "VALIDATION_DF.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "stSsrPvu7_o9", + "outputId": "a4d35d55-eac0-4165-be79-abb883e16443" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "VALIDATION_DF['C75'].plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jaTjGG5l7_o9" + }, + "source": [ + "# Data cleaning\n", + "모델을 실험하면서 최종결과를 확인할 때 복원이 잘 되는 것을 확인할 수 있었지만,\n", + "앞부분의 정상구간이 다른 정상구간 보다 Reconstruction_error가 높게 나타나는 것을 알 수 있었습니다.\n", + "\n", + "그래서 확인을 했을 때 한 변수가 정상인 구간에서 1이 넘어가는 값을 가지고 있었습니다.\n", + "\n", + "validation set에서 조금 더 정교하게 threshold 조절 및 결과를 확인하기 위해서 해당 변수의 값을 정상 범위에 맞게 임의로 조절하였습니다.\n", + "\n", + "하지만 이부분은 특이한 경우로 validation에서는 정답 label 값을 알고 있고, 정상이지만 비정상 구간에서 일정하게 나타나고 있었기 때문에 조절하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "snikMmBJ7_o-" + }, + "outputs": [], + "source": [ + "# valid 그래프를 보고 앞부분 정상인데 값이 튀는 변수가 있어서 조절\n", + "VALIDATION_DF['C75'][:2110] = 0.95" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2i8ccuWR7_o-", + "outputId": "eaaffc1c-912e-410c-c638-fe584a4c348d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(43201, 1, 79)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val = np.array(VALIDATION_DF)\n", + "x_val = val.reshape(val.shape[0], 1, val.shape[1])\n", + "x_val.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-wvyAtAB7_o-" + }, + "source": [ + "모델의 결과가 3차원의 형태이기 때문에 복원된 결과와의 차이를 확인하기 위해서는 2차원으로 다시 바꿔줘야합니다.\n", + "\n", + "그래서 flatten 함수를 구현하여 활용하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TAywnGrt7_o_" + }, + "outputs": [], + "source": [ + "def flatten(X):\n", + " flattened_X = np.empty((X.shape[0], X.shape[2])) # sample x features array.\n", + " for i in range(X.shape[0]):\n", + " flattened_X[i] = X[i, (X.shape[1]-1), :]\n", + " return(flattened_X)\n", + "\n", + "def scale(X, scaler):\n", + " for i in range(X.shape[0]):\n", + " X[i, :, :] = scaler.transform(X[i, :, :])\n", + " \n", + " return X" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "N4K2y-mi7_o_" + }, + "source": [ + "모델의 의해 재구성된 값을 실제 값과 차이를 구해서 재구성 손실(reconstruction error) 값을 구해줍니다.\n", + "\n", + "정상인경우 모델이 잘 학습되어 복원이 잘 되었기 때문에 reconstruction error 값이 작게 나올 것이고,\n", + "공격인 경우 정규화된 값에서 0과 1을 벗어나기 때문에 reconstruction error 값이 크게 나올 것입니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KAMK305o7_pA", + "outputId": "cbf660ff-0caa-4cab-eda8-552911a88506" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(43201, 1, 79)\n", + "(43201, 79)\n", + "(43201,)\n", + "7.681452989578247\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "valid_x_predictions = model.predict(x_val)\n", + "print(valid_x_predictions.shape)\n", + "\n", + "error = flatten(x_val) - flatten(valid_x_predictions)\n", + "print((flatten(x_val) - flatten(valid_x_predictions)).shape)\n", + "\n", + "valid_mse = np.mean(np.power(flatten(x_val) - flatten(valid_x_predictions), 2), axis=1)\n", + "print(valid_mse.shape)\n", + "print(time.time()-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OEDb6tf57_pA" + }, + "source": [ + "# Precision Recall Curve\n", + "\n", + "threshold의 경우 Recall과 Precision의 값이 교차되는 지점을 기준으로 조금 씩 수정하면서 결과를 확인하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "M73o51SE7_pB", + "outputId": "d0b36fd9-a9ed-41f3-e8fa-f04b1f15ce69" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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0YiIxFdDQwNDhgxRAt8GZsaQIUN6VIuRVRJ39w/c/TPuPsLdhxO6nH1hG+MsfVUD4OCvwVtPwoqXix2NiEisKIFvu57+7bpM4mY2xszmmtkfzewsM6sxsx8BLwEFnzY0Hzps2AYw5VRIlcM/flnQeERERLLVXUn8JsJ451cCewFPEKrUJ7v7V/IcW8F0+MOndjjsNguemgtvPF7wmEREZNuUlZUxdepU9tprL0455RQ2bNiw3a954YUX8uCDD3b6/Jw5c7jppoJOwgl0n8QHu/tF7n6/u/87MAI43d3fLUBsBdFZQRyAoy6BpgZYcF2hwhERke1UXV3NwoULef7556msrGTOnC0GCqW5ueedq7773e/ysY99rNPnZ8+ezWmnndbj191e3d4TN7NBZjbYzAYD7wI1Gdu9gnU4ayowaCfY9Qh497nCBiQiIjlx8MEHs3TpUh599FEOO+wwPv3pT7P33nvT3NzMf/7nf7LvvvsyefJkrr322tZzfvCDH7D33nszZcoULrjgAgBOP/10brvtNgAuuOACJk6cyOTJk/n6178OwEUXXcSPfvQjABYuXMj+++/P5MmTOfHEE/nwww8BOPTQQzn//POZOXMmu+22G3/961+3+/q662I2AHim3b70tgM7b3cERead3hSPjNwHlj4YZjWr7FuYoEREeoGL/7CYF95Zm9PXnDiyP985blJWxzY1NXHvvfcya9YsAJ566imef/55xo8fz9y5cxkwYADz58+nsbGRgw46iCOPPJIlS5Zw55138uSTT1JTU8OqVau2eM1Vq1Zxxx13sGTJEsyM1atXb/W+p512GldeeSWHHHIIF154IRdffDGXXXZZa0xPPfUU99xzDxdffHGXVfTZ6K4kvqu7j+9kiX0CT+uyMeDOhwAOS/5UqHBERGQ7bNy4kalTpzJjxgzGjh3LWWedBcDMmTNb+18/8MAD3HTTTUydOpX99tuPlStX8sorr/Dggw9yxhlnUFNTA8DgwVtWOvfv35+qqirOPvtsbr/99tbj0tasWcPq1as55JBDAPj85z/PX/7yl9bnTzrpJACmT5/OsmXLtvtauyuJP2FmdYTpQu9z9+1/xxLTTTkcxh4YBn+5/79CQ7eq/oUIS0Qk9rItMeda+p54e337ttWmujtXXnklRx111BbH3HfffV128yovL+epp57ioYce4pZb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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "error_df = pd.DataFrame({'Reconstruction_error': valid_mse, \n", + " 'True_class':list(VALIDATION_DF_RAW['attack'])})\n", + "precision_rt, recall_rt, threshold_rt = metrics.precision_recall_curve(error_df['True_class'], error_df['Reconstruction_error'])\n", + "\n", + "plt.figure(figsize=(8,5))\n", + "plt.plot(threshold_rt, precision_rt[1:], label='Precision')\n", + "plt.plot(threshold_rt, recall_rt[1:], label='Recall')\n", + "plt.xlabel('Threshold'); plt.ylabel('Precision/Recall')\n", + "plt.legend()\n", + "#plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ho-wudP_7_pB", + "outputId": "4bed0605-2f29-41a9-c0ee-abce989e77a1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "precision: 0.9411764705882353 , recall: 0.9411764705882353\n", + "threshold: 0.00036586847637974846\n" + ] + } + ], + "source": [ + "index_cnt = [cnt for cnt, (p, r) in enumerate(zip(precision_rt, recall_rt)) if p==r][0]\n", + "print('precision: ',precision_rt[index_cnt],', recall: ',recall_rt[index_cnt])\n", + "\n", + "# fixed Threshold\n", + "threshold_fixed = threshold_rt[index_cnt]\n", + "print('threshold: ',threshold_fixed)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nWB-Tu-Z7_pC" + }, + "source": [ + "위에서 data cleaning을 적용하였을 때 precision 및 recall 값도 높게 잘 나오는 것을 확인할 수 있었습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OXmK5r4N7_pC" + }, + "source": [ + "# Predict Validation data set\n", + "우선 위에서 구한 threshold의 값으로 시각화를 하여 결과를 확인해 보겠습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1bvhKS_m7_pE", + "outputId": "5ed621b2-7ab1-4982-8764-16ef16cea6e4" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 0, 'Data point index')" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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H3PllVfmPe95T5Lkm9/8Zr74xS/mxBNPzJo1a7J58+asWLEiX/7yl7N9+/YkyU033ZRzzz03733ve3Pqqafe5azLQeEEAAAAHN6mVzUjm3rzyeRUMj3T6uV/+Id/OF//+tdz0003JUmOOeaYO56rteaP/uiP8rSnPe1O5/zZn/1Zbrrpplx++eU54ogjcvLJJ+f2229Pkhx77LE56aST8slPfnJkCydrOAEAAACHt9m1yeN/NXngymY7u6bVy3/+85/PwsJC7nvf++723NOe9rSsX78+O3bsSJJ84QtfyG233ZZvfvObud/97pcjjjgiGzduzPXXX3/HOUceeWTe//7358///M/zl3/5l61mbYsRTgAAAMDhbWLyLq/ZtNSuNZySZhTThRdeuMc70v3iL/5irrvuupx11lmptea4447L+9///jzvec/Ls571rKxcuTJnnnlmHvnIR97pvGOOOSZ/93d/l6c85Sk55phjcu6557aa/64qtdauMyy7lStX1q1bt3YdAwAAADgIPve5z+VRj3pU1zEOKXv6mpZSLq+1rtzT602pAwAAAKBVCicAAAAAWqVwAgAAAKBVCicAAAAAWqVwAgAAAKBVCicAAAAAWqVwAgAAAGjRzTffnDPPPDNnnnlm7n//++eBD3xgzjzzzNzrXvfKKaec0vrne+1rX5s3vOEN+3XO3e9+9z0ef9GLXpT3vOc9dzmTwgkAAACgRfe9731zxRVX5IorrshLX/rSvOpVr7pjf8WKfVcxvV7vIKRcXgonAAAAgINkYWEhv/RLv5RTTz01T33qUzM/P58kOfvss7NmzZrMzMzkf/2v/5XLL788MzMz+cEf/ME87WlPy4033pgkefOb35xTTjklp59+es4777w7rvvZz342Z599dh7ykIfkzW9+8x3H3/jGN+bRj350Hv3oR+cP//APd8tTa83LX/7ynHLKKXnmM5+Zr33ta628z8lWrgIAAAAwqs4+u93rfexjB3zqF7/4xbz73e/Ohg0b8tM//dN573vfm5/7uZ9Lktxyyy3ZtGlTduzYkZmZmXzgAx/Icccdl7/6q7/K2rVr8453vCOve93rMjc3l6OOOiq33HLLHdf9/Oc/n40bN+Zb3/pWHvGIR+RXfuVXcuWVV+ad73xntmzZklprHve4x2VmZiaPecxj7jjvfe97X66++upcddVV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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "error_df = pd.DataFrame({'Reconstruction_error': valid_mse ,\n", + " 'True_class': list(VALIDATION_DF_RAW['attack'])})\n", + "groups = error_df.groupby('True_class')\n", + "fig, ax = plt.subplots(figsize=(20,20))\n", + "\n", + "for name, group in groups:\n", + " ax.plot(group.index, group.Reconstruction_error, marker='o', ms=3.5, linestyle='',\n", + " label= \"Break\" if name == 1 else \"Normal\")\n", + " \n", + "ax.hlines(threshold_fixed, ax.get_xlim()[0], ax.get_xlim()[1], colors=\"r\", zorder=100, label='Threshold')\n", + "ax.legend()\n", + "\n", + "plt.title(\"Reconstruction error for different classes\")\n", + "plt.ylabel(\"Reconstruction error\")\n", + "plt.xlabel(\"Data point index\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E0oMgM5w7_pF" + }, + "source": [ + "결과를 확인해보면 정상인 구간에서는 복원이 잘 되어 reconstruction error 값이 작게 나왔고, 비정상인 구간은 확실하게 reconstruction error 값이 높게 나오는 것을 확인할 수 있습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Px76I8Gx7_pF" + }, + "source": [ + "# 이동평균 " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RCVt5bHd7_pF" + }, + "source": [ + "그 다음 조금 더 좋은 결과를 얻기 위해서 이동평균 값을 활용하였습니다.\n", + "\n", + "reconstruction error의 이동 평균 값을 활용함으로써 정상인 구간과 비정상인 구간을 조금 더 명확하게 구분할 수 있었습니다.\n", + "\n", + "threshold 값을 기준으로 구분하다보면 시작점과 끝점을 찾는 것이 어려웠습니다.\n", + "그래서 이동평균 값을 통해 정상인 구간은 평균적으로 더 낮게 하고, 비정상인 구간은 평균적으로 더 높은 값을 나타내도록 하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZOUaDD-t7_pF", + "outputId": "90f9cc02-eed5-4521-d607-da784aa4d086" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.000000\n", + "1 0.000000\n", + "2 0.000000\n", + "3 0.000000\n", + "4 0.000000\n", + " ... \n", + "43196 0.000138\n", + "43197 0.000138\n", + "43198 0.000137\n", + "43199 0.000135\n", + "43200 0.000133\n", + "Name: Reconstruction_error, Length: 43201, dtype: float64" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#이동평균\n", + "mean_window = error_df['Reconstruction_error'].rolling(50).mean()\n", + "window_error = mean_window.fillna(0)\n", + "window_error" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false, + "id": "MoO4Jmpv7_pG", + "outputId": "75299769-9d7c-4d41-ccf5-535744102806" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 0, 'Data point index')" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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PEePHs2HPvSh3HjjjUmS3bt35/rrr89NN92UAwcO5KabbupL/ntD4QQAAACc0w5PTGVmdj5JMjM7n0MTU30574Me9KC87GUvyxvf+Ma77b/22mvzkpe8JEny4z/+4/nbv/3bux774R/+4QwNDd21/fznPz+llFx00UV5xCMekYsuuihr1qzJk570pNxyyy1Jkj/6oz/K0572tDz1qU/N0aNH85GPfKQv+e8NhRMAAABwTts0Opx1azsVybq1a7J5dLhv537Na16T3/md38lXvvKVRZ+z8Cpw55133t0eu//9758kWbNmzV33T2632+1MTk7mDW94Q973vvflpptuyvOe97zMzMz0Lf89pXACAAAAzmnbt27IT28eycWPeUh+evNILt+6oW/nftjDHpYf+ZEfye/8zu/ctW/Tpk155zvfmST5/d///Xz3d3/3PT7/nXfemfPOOy8PfvCDc+LEifyf//N/7nXmfrBoOAAAAHBOaw2tyY5tG7Njhc7/i7/4i3nTm9501/Yb3/jG/NRP/VT+83/+z3ctGn5PPeUpT8lTn/rUPOlJT8q3fuu3ZvPmzf2IfK+VWmvTGVbcJZdcUq+//vqmYwAAAABnwUc/+tF827d9W9Mx7lNO9zMtpdxQa73kdM9f0Sl1pZRtpZSbSykfL6W89jSPv7SUclP363Ap5SnLHVtKeVgpZV8p5WPd24eu5GsAAAAA4MysWOFUShlK8uYkz01yYZIXl1IuPOVpk0nGaq1PTvJrSd7aw7GvTfK+WusTkryvuw0AAADAgFjJEU5PT/LxWusnaq3/kuSdSV6w8Am11sO11n/ubv5dkgt6OPYFSd7evf/2JC9cuZcAAAAAwJlaycLp0Uk+tWD71u6+xfx0kpNLqS917CNqrbclSff24X1JCwAAAEBfrORV6spp9p12hfJSyng6hdPJ6wD2fOyi37yUVyR5RZI89rGPPZNDAQAAALgXVnKE061JHrNg+4Iknzn1SaWUJyf570leUGud6uHYE6WUR3WPfVSSz57um9da31prvaTWesn5559/r14IAAAAAL1bycLpuiRPKKWMlFLul+RFSd6z8AmllMcm+dMkP15rPd7jse9J8hPd+z+R5M9X8DUAAAAAnLGhoaFcfPHFecpTnpKnPe1pOXz4cF/Oe8stt+Tbv/3b+3KulbRiU+pqre1SyquS/FWS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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "window_error_df = pd.DataFrame({'Reconstruction_error': window_error ,\n", + " 'True_class': list(VALIDATION_DF_RAW['attack'])})\n", + "groups = window_error_df.groupby('True_class')\n", + "fig, ax = plt.subplots(figsize=(20,20))\n", + "\n", + "for name, group in groups:\n", + " ax.plot(group.index, group.Reconstruction_error, marker='o', ms=3.5, linestyle='',\n", + " label= \"Break\" if name == 1 else \"Normal\")\n", + " \n", + "ax.hlines(threshold_fixed, ax.get_xlim()[0], ax.get_xlim()[1], colors=\"r\", zorder=100, label='Threshold')\n", + "ax.legend()\n", + "\n", + "plt.title(\"Reconstruction error for different classes\")\n", + "plt.ylabel(\"Reconstruction error\")\n", + "plt.xlabel(\"Data point index\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WkXQWXHL7_pH" + }, + "source": [ + "그 결과 공격 범위가 조금 넘어 가더라도 확실하게 공격인 구간을 잘 잡아내도록 하였습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P6VJYZiU7_pH" + }, + "source": [ + "위에서 구한 threshold 값으로 validation set 의 결과를 확인해보겠습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oaTxNvmb7_pH", + "outputId": "d6c450e0-42be-441d-c88c-6fc9f3a28650" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(43201,)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred_y = [1 if e > threshold_fixed else 0 for e in window_error_df['Reconstruction_error'].values]\n", + "pred_y = np.array(pred_y)\n", + "pred_y.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p8Of3TVZ7_pH" + }, + "source": [ + "# 평가" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hie7zr-O7_pI", + "outputId": "cd09ff24-80a4-4121-979c-5b251b1672dc" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ATTACK_LABELS = np.array(VALIDATION_DF_RAW[ATTACK_FIELD])\n", + "FINAL_LABELS = np.array(pred_y)\n", + "\n", + "ATTACK_LABELS.shape[0] == FINAL_LABELS.shape[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "Q8XEqngy7_pI", + "outputId": "4a3b6526-058d-4fd2-c148-e2c7414ce63e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "F1: 0.998 (TaP: 0.998, TaR: 0.997)\n", + "# of detected anomalies: 5\n", + "Detected anomalies: ['1', '2', '3', '4', '5']\n" + ] + } + ], + "source": [ + "TaPR = etapr.evaluate(anomalies=ATTACK_LABELS, predictions=FINAL_LABELS)\n", + "print(f\"F1: {TaPR['f1']:.3f} (TaP: {TaPR['TaP']:.3f}, TaR: {TaPR['TaR']:.3f})\")\n", + "print(f\"# of detected anomalies: {len(TaPR['Detected_Anomalies'])}\")\n", + "print(f\"Detected anomalies: {TaPR['Detected_Anomalies']}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cc3-ppr37_pJ" + }, + "source": [ + "비정상 구간에서 특이했던 변수의 데이터 값을 조절하고, 이동 평균 값을 활용하였을 때 validation set에서 TaPR 점수가 99.8이라는 높은 점수가 나오는 것을 확인할 수 있었습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NXobwDyy7_pJ" + }, + "source": [ + "# Predict Test data set" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yKIiGu6Z7_pJ" + }, + "source": [ + "validation data set과 동일한 방법으로 진행하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SuLjQjso7_pK", + "outputId": "1bfe326c-8642-46f4-c28c-2772abf22e41" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeC01C02C03C04C05C06C07C08C09...C70C71C72C73C74C75C76C77C78C79
02020-07-09 15:00:00384.3073712.01070.35980-1.6171-1.79901774.2075228.02385136...936.584470.01.3543713.9723135.2233812.02545293.51129283.9265132.06.5059
12020-07-09 15:00:01384.3073712.01070.35980-1.7606-1.79901772.5875828.02730136...940.933170.01.3543713.9335835.2081312.02545292.67938283.3659132.06.3079
22020-07-09 15:00:02384.2051712.01070.35980-1.7606-1.80664772.5875828.02730136...936.584470.01.3551313.9524835.2081312.02545291.90179282.9318932.06.3079
32020-07-09 15:00:03384.2562612.01070.35980-1.7814-1.79901777.4881028.02905136...933.540340.01.3551313.8997135.2081312.02545291.59430282.0637832.06.1203
42020-07-09 15:00:04384.2051712.01070.35980-1.7370-1.79901778.4221228.03169136...944.412230.01.3543713.9460335.2081312.02545289.87628283.6733432.05.9543
..................................................................
923962020-07-31 12:29:56420.0892312.01048.31848-0.870697.19238786.5438228.03253232...824.82147100.01.356669.6220336.4746011.78894357.27722361.1472832.06.2809
923972020-07-31 12:29:57420.0892312.01048.31848-0.749897.19238784.0718428.03598224...823.51697100.01.355139.4874736.4746011.78894357.29529359.8452132.06.3602
923982020-07-31 12:29:58420.2425812.01048.31848-0.607697.19238786.8388128.02642208...824.82147100.01.356669.5778736.4898611.78894357.27722360.6047432.06.3742
923992020-07-31 12:29:59420.2425812.01048.31848-0.461897.19238786.6613828.03341200...833.51904100.01.355139.5629136.4898611.78894357.80170357.4218832.06.2864
924002020-07-31 12:30:00420.2937312.01048.31848-0.366197.20001785.7229028.03247192...827.43085100.01.355909.5368936.4746011.78894357.07825358.6516132.06.0371
\n", + "

358804 rows × 80 columns

\n", + "
" + ], + "text/plain": [ + " time C01 C02 C03 C04 C05 C06 \\\n", + "0 2020-07-09 15:00:00 384.30737 12.0 10 70.35980 -1.6171 -1.79901 \n", + "1 2020-07-09 15:00:01 384.30737 12.0 10 70.35980 -1.7606 -1.79901 \n", + "2 2020-07-09 15:00:02 384.20517 12.0 10 70.35980 -1.7606 -1.80664 \n", + "3 2020-07-09 15:00:03 384.25626 12.0 10 70.35980 -1.7814 -1.79901 \n", + "4 2020-07-09 15:00:04 384.20517 12.0 10 70.35980 -1.7370 -1.79901 \n", + "... ... ... ... ... ... ... ... \n", + "92396 2020-07-31 12:29:56 420.08923 12.0 10 48.31848 -0.8706 97.19238 \n", + "92397 2020-07-31 12:29:57 420.08923 12.0 10 48.31848 -0.7498 97.19238 \n", + "92398 2020-07-31 12:29:58 420.24258 12.0 10 48.31848 -0.6076 97.19238 \n", + "92399 2020-07-31 12:29:59 420.24258 12.0 10 48.31848 -0.4618 97.19238 \n", + "92400 2020-07-31 12:30:00 420.29373 12.0 10 48.31848 -0.3661 97.20001 \n", + "\n", + " C07 C08 C09 ... C70 C71 C72 C73 \\\n", + "0 774.20752 28.02385 136 ... 936.58447 0.0 1.35437 13.97231 \n", + "1 772.58758 28.02730 136 ... 940.93317 0.0 1.35437 13.93358 \n", + "2 772.58758 28.02730 136 ... 936.58447 0.0 1.35513 13.95248 \n", + "3 777.48810 28.02905 136 ... 933.54034 0.0 1.35513 13.89971 \n", + "4 778.42212 28.03169 136 ... 944.41223 0.0 1.35437 13.94603 \n", + "... ... ... ... ... ... ... ... ... \n", + "92396 786.54382 28.03253 232 ... 824.82147 100.0 1.35666 9.62203 \n", + "92397 784.07184 28.03598 224 ... 823.51697 100.0 1.35513 9.48747 \n", + "92398 786.83881 28.02642 208 ... 824.82147 100.0 1.35666 9.57787 \n", + "92399 786.66138 28.03341 200 ... 833.51904 100.0 1.35513 9.56291 \n", + "92400 785.72290 28.03247 192 ... 827.43085 100.0 1.35590 9.53689 \n", + "\n", + " C74 C75 C76 C77 C78 C79 \n", + "0 35.22338 12.02545 293.51129 283.92651 32.0 6.5059 \n", + "1 35.20813 12.02545 292.67938 283.36591 32.0 6.3079 \n", + "2 35.20813 12.02545 291.90179 282.93189 32.0 6.3079 \n", + "3 35.20813 12.02545 291.59430 282.06378 32.0 6.1203 \n", + "4 35.20813 12.02545 289.87628 283.67334 32.0 5.9543 \n", + "... ... ... ... ... ... ... \n", + "92396 36.47460 11.78894 357.27722 361.14728 32.0 6.2809 \n", + "92397 36.47460 11.78894 357.29529 359.84521 32.0 6.3602 \n", + "92398 36.48986 11.78894 357.27722 360.60474 32.0 6.3742 \n", + "92399 36.48986 11.78894 357.80170 357.42188 32.0 6.2864 \n", + "92400 36.47460 11.78894 357.07825 358.65161 32.0 6.0371 \n", + "\n", + "[358804 rows x 80 columns]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "TEST_DF_RAW = dataframe_from_csvs(TEST_DATASET)\n", + "TEST_DF_RAW" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false, + "id": "i6Ijapc_7_pK", + "outputId": "0631110c-7d97-41ac-cd59-1a4475447e6f" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
C01C02C03C04C05C06C07C08C09C10...C70C71C72C73C74C75C76C77C78C79
00.2737150.00.00.8283250.2258820.0009990.3187610.3338250.0104170.139867...0.6777230.00.3178420.4520440.2364830.9444400.2259710.2003890.261620.714722
10.2737150.00.00.8283250.1716340.0009990.3001870.4263980.0104170.137445...0.6805840.00.3178420.4507010.2303440.9444400.2231210.1984990.261620.650106
20.2728250.00.00.8283250.1667470.0009300.2985140.4347380.0104170.137227...0.6780070.00.3182900.4512290.2297910.9444400.2202230.1968800.261620.644285
30.2731820.00.00.8283250.1584780.0009920.3539800.4820560.0104170.190063...0.6757690.00.3183350.4494700.2297360.9444400.2188930.1938230.261620.583093
40.2727730.00.00.8283250.1742690.0009980.3701230.5569140.0104170.266280...0.6826260.00.3178910.4508840.2297310.9444400.2129320.1988880.261620.523348
..................................................................
923960.6195200.00.00.0734260.5321470.9980790.4767200.5810660.0174890.358745...0.5964061.00.3193370.2858880.7905980.0833390.4661520.4858090.261620.622130
923970.6195610.00.00.0734260.5810960.9980790.4465270.6807750.0168530.386044...0.5959561.00.3184390.2814500.7905430.0833390.4663700.4822290.261620.658390
923980.6208990.00.00.0734260.6392100.9980790.4749160.4367910.0157480.453718...0.5967611.00.3192520.2841100.7966190.0833390.4663300.4844060.261620.666539
923990.6210330.00.00.0734260.6995870.9980790.4757410.5980770.0151160.563381...0.6025051.00.3184310.2838620.7972270.0833390.4681060.4740040.261620.638988
924000.6214910.00.00.0734260.7414410.9981480.4651710.5892350.0145320.705708...0.5991151.00.3188030.2829440.7912060.0833390.4658290.4770660.261620.555689
\n", + "

358804 rows × 79 columns

\n", + "
" + ], + "text/plain": [ + " C01 C02 C03 C04 C05 C06 C07 C08 \\\n", + "0 0.273715 0.0 0.0 0.828325 0.225882 0.000999 0.318761 0.333825 \n", + "1 0.273715 0.0 0.0 0.828325 0.171634 0.000999 0.300187 0.426398 \n", + "2 0.272825 0.0 0.0 0.828325 0.166747 0.000930 0.298514 0.434738 \n", + "3 0.273182 0.0 0.0 0.828325 0.158478 0.000992 0.353980 0.482056 \n", + "4 0.272773 0.0 0.0 0.828325 0.174269 0.000998 0.370123 0.556914 \n", + "... ... ... ... ... ... ... ... ... \n", + "92396 0.619520 0.0 0.0 0.073426 0.532147 0.998079 0.476720 0.581066 \n", + "92397 0.619561 0.0 0.0 0.073426 0.581096 0.998079 0.446527 0.680775 \n", + "92398 0.620899 0.0 0.0 0.073426 0.639210 0.998079 0.474916 0.436791 \n", + "92399 0.621033 0.0 0.0 0.073426 0.699587 0.998079 0.475741 0.598077 \n", + "92400 0.621491 0.0 0.0 0.073426 0.741441 0.998148 0.465171 0.589235 \n", + "\n", + " C09 C10 ... C70 C71 C72 C73 C74 \\\n", + "0 0.010417 0.139867 ... 0.677723 0.0 0.317842 0.452044 0.236483 \n", + "1 0.010417 0.137445 ... 0.680584 0.0 0.317842 0.450701 0.230344 \n", + "2 0.010417 0.137227 ... 0.678007 0.0 0.318290 0.451229 0.229791 \n", + "3 0.010417 0.190063 ... 0.675769 0.0 0.318335 0.449470 0.229736 \n", + "4 0.010417 0.266280 ... 0.682626 0.0 0.317891 0.450884 0.229731 \n", + "... ... ... ... ... ... ... ... ... \n", + "92396 0.017489 0.358745 ... 0.596406 1.0 0.319337 0.285888 0.790598 \n", + "92397 0.016853 0.386044 ... 0.595956 1.0 0.318439 0.281450 0.790543 \n", + "92398 0.015748 0.453718 ... 0.596761 1.0 0.319252 0.284110 0.796619 \n", + "92399 0.015116 0.563381 ... 0.602505 1.0 0.318431 0.283862 0.797227 \n", + "92400 0.014532 0.705708 ... 0.599115 1.0 0.318803 0.282944 0.791206 \n", + "\n", + " C75 C76 C77 C78 C79 \n", + "0 0.944440 0.225971 0.200389 0.26162 0.714722 \n", + "1 0.944440 0.223121 0.198499 0.26162 0.650106 \n", + "2 0.944440 0.220223 0.196880 0.26162 0.644285 \n", + "3 0.944440 0.218893 0.193823 0.26162 0.583093 \n", + "4 0.944440 0.212932 0.198888 0.26162 0.523348 \n", + "... ... ... ... ... ... \n", + "92396 0.083339 0.466152 0.485809 0.26162 0.622130 \n", + "92397 0.083339 0.466370 0.482229 0.26162 0.658390 \n", + "92398 0.083339 0.466330 0.484406 0.26162 0.666539 \n", + "92399 0.083339 0.468106 0.474004 0.26162 0.638988 \n", + "92400 0.083339 0.465829 0.477066 0.26162 0.555689 \n", + "\n", + "[358804 rows x 79 columns]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "TEST_DF = normalize(TEST_DF_RAW[VALID_COLUMNS_IN_TRAIN_DATASET]).ewm(alpha=0.9).mean()\n", + "TEST_DF" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PsuVGylM7_pK" + }, + "source": [ + "test dataset에서는 validation dataset에서 처럼 특이한 경우가 보이지 않아서 데이터 값을 정규화만 하고, 그대로 진행하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "DQhE5-W07_pL", + "outputId": "fcab3236-6f1c-4b08-ca62-44a78610af99" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAS3CAYAAADvgK0NAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAACNAElEQVR4nO3df1xUdb4/8NdnhmEAQQURURkYcVAYQC1t1/Kr7lpt+HNNTY1umtbtFtfW7MfWttu6tq7WNQlXK9vMTCt/rOuimV0zrNy72qZugQiogCAgoMgP+Q0zc75/wJgaIDOeM8ic1/Px6BHMz/cIzOt8zpl5jZAkCUREpD6arh6AiIi6BgOAiEilGABERCrFACAiUikGABGRSjEAiIhUyqOrB7haYGCgZDQau3oMIqJu5fjx42WSJPV19Hq3VAAYjUYcO3asq8cgIupWhBD5zlyPu4CIiFSKAUBEpFIMACIilbqljgEQEcmhubkZhYWFaGho6OpRZOXl5YWQkBDodDpZbo8BQERup7CwEH5+fjAajRBCdPU4spAkCZcuXUJhYSEGDRoky21yFxARuZ2Ghgb06dPHbZ78AUAIgT59+si6qmEAkKqxDt19udOTv53cj4kBQKpVmncZbz35JUrzLnf1KOSGSkpKMHfuXAwePBhmsxmTJk3C6dOn8cEHHyAiIgIRERH44IMPrlx+3bp1MJlMEEKgrKzMJTPyGEAnWZqtaKy1oEdvfVePQjLJOX4BAFB0qgL9jD27eBpyJ5Ik4f7778f8+fOxbds2AMD333+P4uJiLFu2DMeOHYMQAiNHjsS0adPg7++PMWPGYMqUKfjZz37msjm5AuikL7dkYdOL/+zqMUhG3PlDSvnyyy+h0+nwxBNPXDltxIgROH/+PO69914EBATA398f9957L/73f/8XAHDbbbfB1VU4XAF00ulvS7t6BCJywrJPTiLjvLy7+cwDemLp1Oh2z09PT8fIkSN/dHpRUREMBsOV70NCQlBUVCTrbI7gCoCIyEXaetFBVx6s5gqAiNxaR1vqSomOjsbOnTt/dHpISAi++uqrK98XFha6dJ//9bgCICKS2YQJE9DY2Ih33333ymlHjx7FgAED8Pnnn6OiogIVFRX4/PPPcd9993XZnAwAUi/7ctz9Xi5OXUwIgb///e84cOAABg8ejOjoaPzhD3/AgAED8PLLL+OOO+7AHXfcgd///vcICAgAAPz5z39GSEgICgsLMWzYMDz22GOKz8ldQEREChgwYAB27Njxo9MjIiKwcOHCH53+q1/9Cr/61a9cMdoVXAEQEakUA4CISKUYAEREKsUAICJSKQYAEZFKMQBI9QRfB0oqxQAgIlKAo3XQDz30EIYOHYqYmBgsXLgQzc3Nis8oWwAIIbRCiO+EEHtbvw8QQhwQQpxp/b+/XPdFJAe2gZJS7HXQP/vZz5CTk4OMjAysWLHiSh30v/71L3z77bdYtmwZKioqALQEQFZWFk6cOIH6+nps2LBB8TnlXAEsBpB51fcvAkiRJCkCQErr90REbs+ZOuhJkyZBCAEhBH7yk5+gsLBQ8TlleSewECIEwGQAfwLwTOvJvwTws9avPwDwFYAX5Lg/IqJO++xFoOSEvLcZHAtMfLXds2+mDrq5uRlbtmzBmjVr5Ju3HXKtAJIA/BqA7arT+kmSVAwArf8Pkum+iOTFY8DkIp2pg05ISMC4ceMwduxYxee56RWAEGIKgAuSJB0XQvzMies/DuBxAAgNDb3ZcRQnSZJbftg0kdvqYEtdKc7WQS9btgwXL17EO++844Ip5VkBjAEwTQiRB2AbgAlCiA8BlAoh+gNA6/8vtHVlSZL+IknSKEmSRvXt21eGcYiIupYzddAbNmzA/v37sXXrVmg0rnmB5k3fiyRJv5EkKUSSJCOAuQAOSpL0HwD2AJjferH5AHbf7H3dEvjSESK6AWfqoJ944gmUlpbizjvvxIgRI/DKK68oPqeSddCvAtghhHgUwDkADyh4X0REtxRH66AtFosrxrqGrAEgSdJXaHm1DyRJugTgbjlvn0hWXM2RyvGdwA7ic4b74TF9UisGABGRSjEAHNXG63iJiLojBgARkUoxAEi9uJgjlWMAOIjPGUTUGY7WQT/66KMYPnw4hg0bhlmzZqGmpkbxGRkAREQyc6YO+o033kBqairS0tIQGhqKdevWKT4nA8BRXAIQ0Q04Uwfds2dPAC3hUV9f75LOMSXfCUxE1OVe+/Y1ZJVnyXqbkQGReOEn7bfbO1sHvWDBAuzbtw9msxmrV6+Wdea2cAVAROQiN6qDfv/993H+/HlERUVh+/btis/DFYCjuAuIqFvpaEtdKc7WQQOAVqvFnDlzsGrVKixYsEDRObkCINWSmOakEEfroCVJQnZ2NoCWVcInn3yCyMhIxefkCsBBfNIgohux10E//fTTePXVV+Hl5QWj0YikpKQrddAArtRB22w2zJ8/H5cvX4YkSRg+fDjefvttxedkABCRbC4WVOPcyUsYGWfs6lG6nCN10BqNBv/85z9dNdoVDABHcQFA1K6drx6DzSoxALoJHgMgItnYrNxC6k4YAKR6rnjDDdGtiAHgIG7fEJG7YAAQEakUA8BRXAIQ3VBb73ilWw8DgNSLz1GkIEfroO2eeuop+Pr6umRGvgyUiOQnAVDxsXV7HfT8+fOxbds2AMD3339/pQ762LFjEEJg5MiRmDZtGvz9/QEAx44dQ2Vlpcvm5ArAQVzaEt2Y2v9KnKmDtlqteP755/E///M/LpuTKwAicmslK1agMVPeOmh9VCSCX3qp3fOdqYNet24dpk2bhv79+8s6a0cYAEQkP0nl+4Da0V4d9Pnz5/HXv/71mqZQV2AAEJHsbqVdQB1tqSvF0Tro7777DtnZ2TCZTACAuro6mEymKw2hSuExAFKtW+lJyu2o/B/X0TroyZMno6SkBHl5ecjLy4OPj4/iT/4AA8BxKv/FJqIbs9dBHzhwAIMHD0Z0dDT+8Ic/YMCAAVfqoO+4444rddBdhbuAiEh+3FByqA76ejU1NUqNdQ2uABzE32s3xGOVsuMHJ3UPDAAiIpViAJB6cSNVOfy37RYYAI7iO4GJboh/Jd3DTQeAEMIghPhSCJEphDgphFjcenqAEOKAEOJM6//9b35cIiKSixwrAAuAZyVJigIwGsB/CyHMAF4EkCJJUgSAlNbvuz0uAIg6gX8n3cJNB4AkScWSJP279etqAJkABgL4JQB71+kHAKbf7H0RUffA0kTH66AfeeQRDBo0CCNGjMCIESPw/fffKz6jrO8DEEIYAdwG4F8A+kmSVAy0hIQQIqid6zwO4HEACA0NlXMcok7hRwKT3Jytg161ahVmzZrlsjllOwgshPAF8DcAT0uSdLmz15Mk6S+SJI2SJGlU37595RqHiKjLOFMH3RVkWQEIIXRoefL/SJKkXa0nlwoh+rdu/fcHcEGO+yKSDXdTKOcW+qf9x47TKCuQ9521gQZfjJ09pN3znamDBoDf/va3eOWVV3D33Xfj1VdfhV6vl3Xu68nxKiAB4D0AmZIkJV511h4A81u/ng9g983e1y3hFvrFJrpV8c+kbe3VQQPAypUrkZWVhaNHj6K8vByvvfaa4vPIsQIYA+BhACeEEN+3nvYSgFcB7BBCPArgHIAHZLgvIiKHdLSlrhRH66ABXPkgGL1ejwULFuD1119XfE45XgX0f5IkCUmShkmSNKL1v32SJF2SJOluSZIiWv9fLsfAXY0dJ0SdoPLda47WQQNAcXExgJZVQnJyMmJiYhSfk22gRCQ7lT//X6mDfvrpp/Hqq6/Cy8sLRqMRSUlJV+qgAVxTB/3QQw/h4sWLkCQJI0aMwPr16xWfkwFAxDpQUoCjddAHDx50xVjXYBeQo1S+ZUNE7oMBQETy44ZSt8AAcJDa920SdQZfLNE9MABItfgURWrHACDVYxeQApiu3QIDgIhkx12l3QMDoNXHf/gGKZsyunoMcqXasmv/TyQjR+ugJUnCb3/7WwwZMgRRUVH485//rPiMfB9Aq4qSOlSU1OHuR8wdXo49526k7DSAMOBiFoARXTwMuRNn6qA3bdqEgoICZGVlQaPR4MIF5fszuQIgItmpfUPJmTrot99+G7///e+h0bQ8LQcFtfkRKrLiCoBI5U9W7u7LTX/BhfxcWW8zKCwcP3/k8XbPd6YOOicnB9u3b8ff//539O3bF3/+858REREh69zX4wqAVIwv/yHX6qgOurGxEV5eXjh27Bj+8z//s826CLlxBeAobi0S3dgt9GfS0Za6Upypgw4JCcHMmTMBAPfffz8WLFig+JxcATjKZuvqCUh2t9CzFbkFZ+qgp0+ffqUQ7uuvv8aQIcp/jgFXAI6yWbt6ApINdwEpRe0LZWfqoF988UU89NBDeOONN+Dr64sNGzYoPicDwEGSxABwFyp/jlIY/3UdrYPu3bs3Pv30U1eMdgV3ATmKu4Dcj9o3VxXAf9LugQHgKK4A3Ah3AZG6MQAcJXEF4H64uUrqxABwFHcBuQ8uABSj9ncCdxcMAAfxILD7YQ6QWjEAHMUVgNvhp1cpgP+k3QIDwFFcAbgdwWcr+VWe6+oJupyjddBjx47FiBEjMGLECAwYMADTp09XfEa+D8BRPAjsRlp2/kgSdwLJTuXHAJypg/7HP/5x5fozZ87EL3/5S8Xn5ArAUdwF5IbU/WSlBEmo+6nFmTpou+rqahw8eJArgFuRxABwQwwA+d06AVD5SQ6aztfKepueA3qg99TB7Z7vTB203d///nfcfffd6Nmzp3wDt+PW+Sl1E42W+q4egWRif9ovszR06RzuSO0rgPZ0VAdtt3XrVjz44IMumYcrAAd9kXkED0aO6OoxZCfZJFx483v0edgMj976rh7HJS5amwAAn1wows8duJ5klQBIENpb50musrQEhz7ciIlPPQud5y3w8+uCY2X2J9frn1A72lJXijN10ABw6dIlfPvtt/j73//ugim5AnDYhZoKRW7X1mCBtarxmtMubkyHpezmVxyWS/UofPEfqDlyvt3L1PyjEM1FNSh59dsb3t6lbVmwXDerXCo/zUVDTqUit3295tYnqSo0OXS9ot/+H4p++08lRnLal5vewZlvDyM/7fsrp9UeLXH696euuQ5LdizD3/599oaXtdU1Q7Jdu2VraXLtq+WkZhuKfvN/KPrN/7n0ftvjTB00APz1r3/FlClT4OXl5ZI5GQAOqmtSZhfQhXXfo3jlD0++TUU1aDxdgZLXj930bV9OaXlJXuXunHYvY7nUud0gTedrUP/9xU4FhTNq/lGEsndPKHLb15O0FgCAVVi6/TtXNVotAECy/vDEW/G3M07//mz44i18Ub8THxx4r8PLWS834vwr36Dod9c98br439Pm4sC5EXsd9IEDBzB48GBER0fjD3/4AwYMGHClDvqOO+64pg4aALZt2+ay3T+AGwfAgbIqnKtvREnleSzb+xq+rbgsy+2WVFd36nI7DnyCyWsW4nBOWacuX6RNQZbxb1e+F3ot6jW1gEfnXqJ4tq4R1nb+6GwWC0794hE0+J7DpcxzaKys+dFlGq2lSP/FYygbtKfjO2rd0tMF90BhQxP2l1X9MENOEdK+O92pedtzPuYd1PT97qZuA2jZHXDsaBZstvafiKxoWQFoJC3yyzp/kLAsfDcuDNna6ctbrBakFxR2+vJXq6mux47t/wurteNdKk2t+9ytlpZQkyQJNX2/Q2OP9ld9HblwsWWl27ON97002mz48B//RE1TM2yNredfN15zY9tPyCdr6pFaXXfl+6wzRfj8xI1XGdf7/kQGvv33tRsK+8c8iXOGvQ7fVqdYGlve2+DAri17HXROTg5OnjyJTz/99EoVdHZ2NrKzs3/0qV9fffUV4uLi5J6+XYofAxBCxAFYA0ALYIMkSa/KfR/1DQ048V0abDYLNF562CDhz/tT4OvfFzbvz5AhsvDVDh+s+X8TUF/bgGar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O7dCACiFddBERHTTGABERCrFACAiUikGABGRSjEAiIhUigFARKRSDAAiIgU4Wge9YsWKvqGhoTFCiJHFxcUuaWlgFQQRkczsddDx8fGX9u7dmwsAhw8f9q6oqNBu2bLlbGxsbGNeXp7ujjvuiLr//vsvBwYGWsePH18zc+bMqgkTJgx11ZwMACIimbVXB331Za6ugw4MDLSOGTOm/se3pCwGABG5ted3phpOl1TLWgc9JNivbtWs4bLVQcs5myMYAERELnZ9HXRXYQAQkVvraEtdKY7WQXcVvgqIiEhmjtZBdxUGABGRzDQaDfbs2ZOTkpLS02AwxJhMpuilS5cO+Oqrr/yOHj3q+/HHHwdGRkaaIyMjzYcPH/YGgOXLlwf169dvWGlpqefw4cPNc+bMCVN6TtZBE5HbYR1053AFQESkUgwAIiKVYgAQEakUA4CISKUYAEREKsUAICJSKQYAEZECHK2DnjZt2iCj0RgTERER/cADDxgbGxuF0jMyAIiIZGavgx43blx1QUFBek5OzsmVK1cW1dXVabZs2XI2Ozv75Oeff37mpZdeMpSVlWkB4KGHHirPzc1NP3Xq1MmGhgaRlJQUeKP7uVnsAiIikpkzddBz5sypsp83atSo2sLCQk+l52QAEJF7S/5vAy5kyFoHjSBzHaa/qUgddGNjo9i+fXufxMRExUvsGABERC7WUR30/PnzQ0ePHl0TFxdXo/QcDAAicm8dbKkrxdk66GeffbZ/WVmZx/79+3NcMScPAhMRycyZOujExMTAgwcP9kpOTs511YfEsA2UiNzOrdAGmpeXp0tISDCcOHHCR6/XSyEhIY133HFH7RtvvNHfZDI12C+3cePGs3fddVe9h4fHyP79+zf26NHDBgBTpkypeP3114uvv10520AZAETkdm6FAFAK66CJiOimMQCIiFSKAUBEpFIMACIilWIAEBGpFAOAiEilGABERApwtA569uzZYUOHDjUPGTLEHBcXF15VVaX48zPfB0BEbqer3wdgs9lw++23R8bHx1+yN4IePnzYu6KiQhsaGtocGxvbmJeXp7vjjjuiMjMzTwYGBlrLy8s1AQEBNgB47LHHQoKCgiwrVqwouf625XwfALuAiIhk5kwdtP3J32azob6+XiOE4p8HwwAgIvf28j9fNmRXZMtaB23yN9X9ccwfZa+DnjVrlvHLL7/sZTKZ6tevX18o58xt4TEAIiIXs9dBv/vuu3lXF7/t3Lkzr7S0NDUiIqJh48aNbbaJyokrACJyax1tqSvF2TpoAPDw8MCDDz5Y/vrrrwcvXrz4kpJzcgVARCQzR+ugbTYb0tPT9favd+/e3TsiIqKhrduWE1cAREQy02g02LNnT05CQoIhKSkp+Oo66KNHj/pWVFR4fPzxx4FASx30T3/60/p58+YNqqmp0UiSJKKiouo2bdqUr/ScfBkoEbmdrn4ZqJJYB01ERDeNAUBEpFIMACIilWIAEBGpFAOAiEilGABERCrFACAiUoCjddB28+fPN/j4+Nzmihn5RjAiIpnZbDZMmzbNFB8ff2nv3r25wA910Fu2bDl7dR30/ffffzkwMNAKAIcOHfKpqqpy2fMyA4CISGbO1EFbLBY8//zzITt27DgbFRXV2xVzMgCIyK2df+m3hsYzZ2Stg9ZHRNQNWPEnWeugV65cGTRp0qTKsLCwZjln7QgDgIjIxex10O+9995ZrVaLvLw8XXJysv8333xzypVzMACIyK11tKWuFEfroL/55huf/Px8L6PRGAsADQ0NmtDQ0Jhz586lKzknXwVERCQzR+ug586dW1VWVpZaVFR0oqio6ISXl5dN6Sd/gCsAIiLZOVoHff0BYldhHTQRuR3WQXcOdwEREakUA4CISKUYAEREKsUAICJSKQYAEZFKMQCIiFSKAUBEpABH66BnzpxpHDhwYGxkZKQ5MjLSfPjwYW+lZ+QbwYiIZOZsHfTy5csLFyxYUNHxrcuHAUBEJDNn6qBdPyUDgIjcXMrmTEN5UY2sddABA33r7p4XJWsdNAAsW7Zs4MqVK/uPHTu2et26dYXe3t6KVjXwGAARkYvZ66DffffdPK1WCwBITEwsys3NTU9NTc2sqKjQvvzyy8FKz8EVABG5tY621JXiaB00ANg/CMbb21tauHDhpdWrV/dTek6uAIiIZOZoHTTQsioAWg4g79q1q3dUVJTiDaFcARARycyZOug5c+YMKi8v95AkSZjN5rrNmzfnKz0n66CJyO2wDrpzuAuIiEilGABERCrFACAiUikGABGRSjEAiIhUigFARKRSDAAiIgU4Wgdts9nw1FNPDTQajTHh4eHRy5cvD1J6Rr4RjIhIZs7UQa9du7ZPYWGhLicnJ12r1aKoqEjx52cGABGRzJypg96wYUPQ1q1bc+3lcAMHDrQoPScDgIjc2v63kwxlBfmy1kEHGsLq7nvyaVnroAsKCvRbtmzx//TTT/0DAgIsb7755rnY2NjGjm7jZvEYABGRi7VVB93U1CS8vLyk9PT0zEcfffTiI488YlR6Dq4AiMitdbSlrhRn6qD79evXFB8fXwEADz/8cOWiRYuMSs/JFQARkcycqYOeOHFi5WeffeYHAPv27fMLCwtTdPcPwDZQInJDt0IbaF5eni4hIcFw4sQJn6vroN94443+JpOpwX45ex10WVmZdtasWYPOnz/v6ePjY3v77bfz77zzzh99JoCcbaAMACJyO7dCACiFddBERHTTGABERCrFACAiUikGABGRSjEAiIhUigFARKRSDAAiIgU4Wgc9cuTIoZGRkebIyEhzUFDQsHvuuWew0jOyCoKISGbO1EEfP378lP3699133+CpU6dWKj0nA4CISGbO1EHbT6+oqNAcOXLEb+vWrWeVnpMBQERurXznaUNzSa2sddC64B51AbOGyFoHbffRRx/533XXXZcDAgJscs3bHh4DICJysbbqoO127NgRMHfu3HJXzMEVABG5tY621JXiTB00AJSUlGjT0tJ6zJ49O9sVc3IFQEQkM2fqoAFg8+bNARMmTKj08fFxSUsnA4CISGYajQZ79uzJSUlJ6WkwGGJMJlP00qVLB3z11Vd+R48e9f34448D7S/5PHz4sLf9ejt37gyIj493ye4fgHXQROSGWAfdOVwBEBGpFAOAiEilGABERCrFACAiUikGABGRSjEAiIhUigFARKQAR+ugd+/e7Wc2m6MiIyPNI0eOHJqenq5XekYGABGRzOx10OPGjasuKChIz8nJObly5cqiuro6zZYtW85mZ2ef/Pzzz8+89NJLhrKyMi0ALF68OOzDDz88m5WVlfHAAw+UL126tL/Sc7ILiIhIZs7WQVdWVmoBoKqqStu/f/9mpedkABCRW0tOTjZcuHBB1jrooKCguunTp8taB71+/fq8GTNmROj1epuvr6/16NGjmXLO3BbuAiIicrG26qATExP77dq160xpaWlafHx82ZNPPmlQeg6uAIjIrXW0pa4UR+ugz58/75GZmek9YcKEWgCYN29eRVxcXITSc3IFQEQkM0froPv27WupqanRpqWl6QFg7969PU0mU4PSc3IFQEQkM3sddEJC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Hz9l//q+++4bPHXq1Eql52QAEBHJzJk6aLuKigrNkSNH/LZu3XpW6TkZAETk1sp3njY0l9TKWgetC+5RFzBriKx10HYfffSR/1133XU5ICDAJufMbeExACIiF+moDtpux44dAXPnzi13xTxcARCRW+toS10pztRBA0BJSYk2LS2tx+zZs7NdMSdXAEREMnOmDhoANm/eHDBhwoRKHx8fl7R0MgCIiGTmTB00AOzcuTMgPj7eJbt/ANZBE5EbYh1053AFQESkUgwAIiKVYgAQEakUA4CISKUYAEREKsUAICJSKQYAEZECHK2D3r17t5/ZbI6KjIw0jxw5cmh6erpe6RkZAEREMrPXQY8bN666oKAgPScn5+TKlSuLzp8/rwOAtuqgFy9eHPbhhx+ezcrKynjggQfKly5d2l/pOdkFREQkM2froCsrK7UAUFVVpe3fv3+H7xqWAwOAiNxacnKy4cKFC7LWQQcFBdVNnz5d1jro9evX582YMSNCr9fbfH19rUePHs2Uc+a2cBcQEZGLdFQHnZiY2G/Xrl1nSktL0+Lj48uefPJJg9LzcAVARG6toy11pThaB/273/2uNDMz03vChAm1ADBv3ryKuLi4CKXn5AqAiEhmjtZB9+3b11JTU6O1v0po7969PU0mU4PSc3IFQEQkM3sddEJCgiEpKSlYr9dLISEhjWvXrm1zNaLT6bBmzZr8WbNmDRZCoFevXtZNmzYp/pnArIMmIrfDOujO4S4gIiKVYgAQEakUA4CISKUYAEREKsUAICJSKQYAEZFKMQCIiBTgaB30nj17/Mxmc1RERET0jBkzjM3NinfBMQCIiOTmaB201WrF448/Pmjbtm25Z86cORkaGtq0bt26wPbvQR4MACIimbVXBx0XF1djr4O+9957L9vPKy0t9fD09LQNGzasEQDi4uIuJycn91Z6TlZBEJFby8h8wVBbc1rWOugevkPqzFGvyVYHHRwcbLFYLOLQoUM+48aNq9u+fbt/cXGxp5wzt4UrACIiF2mvDlqj0WDz5s25S5YsMcTGxkb5+flZtVqt4vNwBUBEbq2jLXWlOFoH/dZbbxXdc889tcePHz8FALt27eqZnZ3tpfScXAEQEcnM0TpoACgqKvIAgPr6erFq1argJ5544mJ7ty8XBgARkczsddApKSk9DQZDjMlkil66dOmA0NDQdl/b+corrwSHh4dHR0VFRU+cOLFy2rRp1e1dVi6sgyYit8M66M7hCoCISKUYAEREKsUAICJSKQYAEZFKMQCIiFSKAUBEpFIMACIiBbRXB63VakdGRkaaIyMjzRMmTDDZL5+VleU5bNiwyLCwsJjJkyeHNzQ0CKVnZAAQEcmsozpovV5vy8rKysjKyso4ePBgtv06zzzzTMiiRYtK8/Pz03v16mVZs2YN66CJiLqbjuqg27q8zWbDkSNH/BYsWFABAAsXLrz0ySef9FZ6TpbBEZFbezrznCGrtkHWOujIHl51SVGhDtdBA0BTU5MmJiYmSqvVSs8991zJww8/XFlaWurh5+dn1el0AACj0dhUWlqqeB00A4CIyIWys7PTjEZjc0ZGhue999479Pbbb6/39/e3Xn85IYTiPT0MACJyax1tqSulvTpoADAajc0AYDabm0aPHl397bff+syfP7+iurpa29zcDJ1Oh7y8PM+goCDFPxSYxwCIiGTWXh30p59+6ltfXy8AoLi42OPYsWO+w4YNq9doNBg9enT1+++/7w8AGzdu7DNlypRKpedkABARyay9OmgAGD58eNTQoUPN48ePH/L000+XjBw5sgEAVq9eXbh27drg0NDQmIqKCo/Fixcr3mbKOmgicjusg+4crgCIiFSKAUBEpFIMACIilWIAEBGpFAOAiEilGABERCrFACAiUoCjddArVqzoGxoaGiOEGFlcXOySlgZWQRARycxeBx0fH39p7969uQBw+PBh76vroK+/zvjx42tmzpxZNWHChKGumpMBQEQks/bqoDu6zpgxYzo8XwkMACJya8/vTDWcLqmWtQ56SLBf3apZw2Wrg5ZzNkcwAIiIXKitOujo6OjGrpiFAUBEbq2jLXWlOFoH3VUBwFcBERHJzNE66K6akwFARCQzZ+qgly9fHtSvX79hpaWlnsOHDzfPmTMnTOk5WQdNRG6HddCdwxUAEZFKMQCIiFSKAUBEpFIMACIilWIAEBGpFAOAiEilGABERApwtA562rRpg4xGY0xERET0Aw88YGxsbBRKz8gAICKSmb0Oety4cdUFBQXpOTk5J1euXFl0dR10VlZWxsGDB7Pt13nooYfKc3Nz00+dOnWyoaFBJCUlBXZ0H3JgFxARkcycqYOeM2dOlf3rUaNG1RYWFnoqOSPAACAid5f83wZcyJC1DhpB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wxUAEZFKMQCIiFSKAUBEpFIMACIilWIAEBGpFAOAiEilGABERAo4d+6cx5QpU8INBkPM4MGDo8ePH29KS0vTa7XakZGRkebIyEjzhAkTTPbL7969289sNkdFRkaaR44cOTQ9PV2v9IysgiAikpkzddCLFy8O27VrV/btt9/e8Oqrr/ZdunRp/7/97W95Ss7JACAikpmzddCVlZVaAKiqqtL279+/WckZAQYAEbm55ORkw4ULF2Stgw4KCqqbPn26rHXQ69evz5sxY0aEXq+3+fr6Wo8ePZop58xt4TEAIiIXys7OTktPT8/cunVr7osvvmg4efKkHgASExP77dq160xpaWlafHx82ZNPPmlQehauAIjIrXW0pa4UR+ug/f39rZmZmd4TJkyoBYB58+ZVxMXFRSg9J1cAREQyc7QOum/fvpaamhptWlqaHgD27t3b02QyNbR3+3LhCoCISGb2OuiEhARDUlJSsF6vl0JCQhqff/75kuHDh0cJISBJEq6ug16zZk3+rFmzBgsh0KtXL+umTZsU/0xg1kETkdthHXTncBcQEZFKMQCIiFSKAUBEpFIMACIilWIAEBGpFAOAiEilGABERApwtA56z549fmazOSoiIiJ6xowZxuZmxbvgGABERHKz10GPGzeuuqCgID0nJ+fkypUri66ug87Kyso4ePBgNgBYrVY8/vjjg7Zt25Z75syZk6GhoU3r1q0LvNH93CwGABGRzNqrg46Li6tp6/KlpaUenp6etmHDhjUCQFxc3OXk5OTeSs/JKggicmsZmS8YamtOy1oH3cN3SJ056jXZ6qCDg4MtFotFHDp0yGfcuHF127dv9y8uLvaUc+a2MACIiFwoOzs7zWg0NmdkZHjee++9Q2+//fb66Ojoxs2bN+cuWbLE0NTUpPn5z39epdVqFZ+FAUBEbq2jLXWlOFoHHR0d3XjPPffUHj9+/BQA7Nq1q2d2draX0nPyGAARkcwcrYMGgKKiIg8AqK+vF6tWrQp+4oknLrZ96/LhCoCISGbO1EG/8sorwQcOHOhls9nEwoULL0ybNq1a6TlZB01Ebod10J3DXUBERCrFACAiUikGABGRSjEAiIhUigFARKRSDAAiIpViABARKaC9OugzZ854jhkzJiI8PDx68ODB0adOnfIEgKysLM9hw4ZFhoWFxUyePDm8oaFBKD0jA4CI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SHNkZKT58OHD3krPyCoIIiKZOVsHvXz58sIFCxZUuGpOrgCIiGTmTB10V+AKgIjcWsrmTEN5UY2sddABA33r7p4XJWsdNAAsW7Zs4MqVK/uPHTu2et26dYXe3t6KVjVwBUBE5CL2OuikpKSCtLS0jLy8PP3atWsDASAxMbEoNzc3PTU1NbOiokL78ssvBys9D1cAROTWOtpSV4qjddAAYP8gGG9vb2nhwoWXVq9e3U/pObkCICKSmaN10ACQn5+vA1oOIO/atat3VFRUvdJzcgVARCQzex10QkKCISkpKViv10shISGNa9euLbDXQQNAbGxsnb0Oes6cOYPKy8s9JEkSZrO5bvPmzflKz8k6aCJyO6yD7hzuAiIiUikGABGRSjEAiIhUigFARKRSDAAiIpViABARqRQDgIhIAY7WQdtsNjz11FMDjUZjTHh4ePTy5cuDlJ6RbwQjIpKZM3XQa9eu7VNYWKjLyclJ12q1KCoqUvz5mQFARCSz9uqgjx8/7nV9HbT9/A0bNgRt3bo1V6vVAgAGDhxoUXpOBgARubX9bycZygryZa2DDjSE1d335NOy1kEXFBTot2zZ4v/pp5/6BwQEWN58881zsbGxjXLOfT0eAyAicpGO6qCbmpqEl5eXlJ6envnoo49efOSRR4xKz8MVABG5tY621JXiTB10v379muLj4ysA4OGHH65ctGiRUek5uQIgIpKZM3XQEydOrPzss8/8AGDfvn1+YWFhiu7+AdgGSkRu6FZoA83Ly9MlJCQYTpw44XN1HXR2drb+hRdeCAFa6qA/+uijfC8vL6msrEw7a9asQefPn/f08fGxvf322/l33nnnjz4TQM42UAYAEbmdWyEAlMI6aCIiumkMACIilWIAEBGpFAOAiEilGABERCrFACAiUim+E5iISAHnzp3zSEhICE1NTfXx9PS88j4Ab29v6ZFHHgkrLi72FEJg3759Z4YOHdo0cuTIobW1tVoAKC8v9xg2bFjtF198kaPkjAwAIiKZOVMHffz48VP26993332Dp06dWqn0nNwFREQks/bqoPv27Wu5vg7az8/PdvV1KyoqNEeOHPGz9wIpiSsAInJr5TtPG5pLamWtg9YF96gLmDVE1jpou48++sj/rrvuuhwQEGC7/vpy4wqAiMhFOqqDttuxY0fA3Llzy10xD1cAROTWOtpSV4oz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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "TEST_DF.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xs3N-bBv7_pL", + "outputId": "4f58dc7e-182c-4bbd-ceda-c252a3bf338d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.27371535 0. 0. ... 0.20038876 0.26161984 0.7147216 ]\n", + " [0.27371535 0. 0. ... 0.19849946 0.26161984 0.6501059 ]\n", + " [0.27282545 0. 0. ... 0.19687971 0.26161984 0.64428467]\n", + " ...\n", + " [0.6208987 0. 0. ... 0.48440555 0.26161984 0.666539 ]\n", + " [0.62103254 0. 0. ... 0.4740037 0.26161984 0.6389876 ]\n", + " [0.62149084 0. 0. ... 0.47706646 0.26161984 0.555689 ]]\n" + ] + }, + { + "data": { + "text/plain": [ + "(True, True, False)" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boundary_check(TEST_DF)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "l0urBWpl7_pM", + "outputId": "1313f6a8-b86b-42e4-b7d8-c123b1b5e3d0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(358804, 1, 79)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test = np.array(TEST_DF)\n", + "x_test = test.reshape(test.shape[0], 1, test.shape[1])\n", + "x_test.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d14bj9Wq7_pM", + "outputId": "304bb27e-c64d-45b9-cec4-28953f35a228" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(358804, 1, 79)\n", + "(358804,)\n", + "57.45735478401184\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "test_x_predictions = model.predict(x_test)\n", + "#print(test_x_predictions)\n", + "print(test_x_predictions.shape)\n", + "#print((flatten(x_test) - flatten(test_x_predictions)).shape)\n", + "test_mse = np.mean(np.power(flatten(x_test) - flatten(test_x_predictions), 2), axis=1)\n", + "print(test_mse.shape)\n", + "print(time.time()-start)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fUtdlMMJ7_pM" + }, + "outputs": [], + "source": [ + "test_error = pd.DataFrame({'Reconstruction_error': test_mse})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NrEsuo-y7_pN" + }, + "source": [ + "테스트 데이터 셋에서는 label 값을 알 수 없었기 때문에, \n", + "이동평균의 구간과 threshold 값을 조금씩 변경하면서 제출 후 결과를 보고 조절하였습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bXotIxtm7_pN", + "outputId": "06a1b9a8-7a8a-4202-f44a-31b9b5b23186" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.000000\n", + "1 0.000000\n", + "2 0.000000\n", + "3 0.000000\n", + "4 0.000000\n", + " ... \n", + "358799 0.000335\n", + "358800 0.000333\n", + "358801 0.000332\n", + "358802 0.000330\n", + "358803 0.000328\n", + "Name: Reconstruction_error, Length: 358804, dtype: float64" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_move = test_error['Reconstruction_error'].rolling(71).mean()\n", + "\n", + "test_d = test_move.fillna(0)\n", + "test_d" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "DxWXlOPz7_pN" + }, + "outputs": [], + "source": [ + "movemean_test = pd.DataFrame({'Reconstruction_error': test_d})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cNlOInkR7_pO", + "outputId": "1833aa61-ab6f-4a1c-f889-8e90ed2d698d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(358804,)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred_y_test = [1 if e > 0.000425 else 0 for e in movemean_test['Reconstruction_error'].values]\n", + "pred_y_test = np.array(pred_y_test)\n", + "pred_y_test.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ByvHHUsm7_pO" + }, + "outputs": [], + "source": [ + "submission = pd.read_csv('D:\\\\python_project\\\\hyunmin_project\\\\ot보안\\\\data\\\\HAI 2.0\\\\sample_submission.csv')\n", + "submission.index = submission['time']\n", + "submission['attack'] = pred_y_test" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "dwtdBTVB7_pO", + "outputId": "8b8ae166-e3e0-41a7-9021-18b9070176aa" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 349649\n", + "1 9155\n", + "Name: attack, dtype: int64" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "submission['attack'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "id": "Dd8bcnJP7_pP", + "outputId": "fcccbfe2-7141-4778-95b2-b8ce63a44494" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 0, 'Data point index')" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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O3booYceUn9/vx566CEv5c+CgBEAAAAAAIja1n95TEePDUuSjh4b1nf+5TEvv/e5z32u3vOe9+jTn/70uM9v27ZN73jHOyRJ7373u7Vly5bjX/vN3/xNdXV1HX9+7bXXyhijyy67TD09PbrssstUqVQ0Y8YMDQ4OSpL+9m//VldeeaWuuOIK7dmzR3v37vVS/iwIGAEAAAAAgKi97qXnauoUF+KYOqWi17/0XG+/+8Mf/rA+97nP6emnnz7h94w9hezMM88c97XTTz9dklSpVI5/PPK8Vqtp//79+sQnPqF7771XDz30kN785jfr6NGj3sqfFgEjAAAAAAAQtd+/+mX67df3adZLnqfffn2fPnL1y7z97he84AV629veps997nPHP/e6171O69atkyR96Utf0pw5c1L//ieffFJnnnmmzjnnHA0NDekf//EfM5fZBza9BgAAAAAAUevuquhj/+mX9LEO/f6PfvSjWr169fHnn/70p/W+971Pf/zHf3x80+u0Zs6cqSuuuEIzZszQtGnT9PrXv95HkTMz1tq8y3BKs2fPtjt27Mi7GAAAAAAAYBL84Ac/0Cte8Yq8i1EoE/1NjTEPWmtnT/T9LEkDAAAAAADAOASMAAAAAAAAMA4BIwAAAAAAAIxDwAgAAAAAAADjEDACAAAAAADAOASMAAAAAAAAMA4BIwAAAAAAgISuri7NmjVLM2fO1JVXXqmtW7d6+b2Dg4O69NJLvfyuTurOuwAAAAAAAAChOeOMM7Rr1y5J0j/90z/pv/7X/6r+/v5x31Ov19XV1ZVD6TqPDCMAAAAAABC3ek1av0Jas8g91mtef/2TTz6p5z//+ZKkTZs2acGCBXrHO96hyy67TPV6XR/72Mf0qle9Spdffrk+85nPSJKeeuopLVq0SFdeeaUuu+wyfeMb32j6vfv27dMVV1yh7du3ey2vD2QYAQAAAACAuG28VXrgTunYM9LQHklGesN/z/Qrn3nmGc2aNUtHjx7V4cOHtWHDhuNf++53v6vvf//76uvr02c/+1mdc8452r59u5599lm9/vWv1xvf+Ea95CUv0de+9jU997nP1c9+9jNdddVV+tVf/dXjv+NHP/qRFi9erC984QuaNWtWprJ2AgEjAAAAAAAQt/33uWCRJNWekfb3n/z7WzB2Sdq2bdv0nve8R9///vclSa9+9avV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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "test_error_df = pd.DataFrame({'Reconstruction_error': test_d,\n", + " 'True_class': list(submission['attack'])})\n", + "groups = test_error_df.groupby('True_class')\n", + "fig, ax = plt.subplots(figsize=(20,20))\n", + "\n", + "for name, group in groups:\n", + " ax.plot(group.index, group.Reconstruction_error, marker='o', ms=3.5, linestyle='',\n", + " label= \"Break\" if name == 1 else \"Normal\")\n", + " \n", + "ax.hlines(0.000425, ax.get_xlim()[0], ax.get_xlim()[1], colors=\"r\", zorder=100, label='Threshold')\n", + "ax.legend()\n", + "\n", + "plt.title(\"Reconstruction error for different classes\")\n", + "plt.ylabel(\"Reconstruction error\")\n", + "plt.xlabel(\"Data point index\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3mATnS167_pP" + }, + "source": [ + "최종 예측한 label의 결과를 확인해보았습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3A4ebO2a7_pP" + }, + "source": [ + "마지막으로 결과를 제출약식에 맞춰 저장합니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b8eabi897_pQ" + }, + "outputs": [], + "source": [ + "#submission.to_csv('predict.csv', index=False)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + }, + "colab": { + "name": "week18_김희숙_예습과제.ipynb", + "provenance": [] + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From e6bd33e1b9c5e08dcc20b4faf3c8437847a14f0e Mon Sep 17 00:00:00 2001 From: kimsook <40443049+kimsook@users.noreply.github.com> Date: Thu, 14 Jul 2022 23:40:26 +0900 Subject: [PATCH 3/3] =?UTF-8?q?19=EC=A3=BC=EC=B0=A8=20=EC=98=88=EC=8A=B5?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354\212\265\352\263\274\354\240\234.ipynb" | 2059 +++++++++++++++++ 1 file changed, 2059 insertions(+) create mode 100644 "week19_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" diff --git "a/week19_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" "b/week19_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" new file mode 100644 index 0000000..7e76aa3 --- /dev/null +++ "b/week19_\352\271\200\355\235\254\354\210\231_\354\230\210\354\212\265\352\263\274\354\240\234.ipynb" @@ -0,0 +1,2059 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "VB2w6aqFG1Mh" + }, + "source": [ + "# **1. 데이터 및 라이브러리 불러오기**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VYP2ypq6G1Mr" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import re\n", + "import json\n", + "import os\n", + "import tqdm\n", + "\n", + "from konlpy.tag import Okt\n", + "\n", + "import sklearn\n", + "from sklearn.preprocessing import LabelEncoder\n", + "\n", + "from sklearn.metrics import log_loss, accuracy_score,f1_score\n", + "import tensorflow as tf\n", + "from tensorflow.keras.preprocessing.sequence import pad_sequences\n", + "from tensorflow.keras.preprocessing.text import Tokenizer\n", + "from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint\n", + "from transformers import *" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NuRT-ijiG1Mv" + }, + "outputs": [], + "source": [ + "train=pd.read_csv('train.csv')\n", + "test=pd.read_csv('test.csv')\n", + "sample_submission=pd.read_csv('sample_submission.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oD1EcmQOG1Mw" + }, + "source": [ + "# **2. 데이터 EDA**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sNO4CkCWG1Mx", + "outputId": "c0ed4d11-f90f-4ec2-e6ad-5e6536581749" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
index제출년도사업명사업_부처명계속과제여부내역사업명과제명요약문_연구목표요약문_연구내용요약문_기대효과요약문_한글키워드요약문_영문키워드label
002016농업기초기반연구농촌진흥청신규농산물안전성연구유전정보를 활용한 새로운 해충 분류군 동정기술 개발○ 새로운 해충분류군의 동정기술 개발 및 유입확산 추적(가) 외래 및 돌발해충의 발생조사 및 종 동정\\n\\n\\n ○ 대상해충 : 최...○ 새로운 돌발 및 외래해충의 신속, 정확한 동정법 향상\\n\\n\\n○ 돌발 및 외래...뉴클레오티드 염기서열, 분자마커, 종 동정, 침샘, 전사체nucleotide sequence, molecular marker, species...24
112019이공학학술연구기반구축(R&D)교육부신규지역대학우수과학자지원사업(1년~5년)대장암의 TRAIL 내성 표적 인자 발굴 및 TRAIL 반응 예측 유전자 지도 구축...최종목표: TRAIL 감수성 표적 유전자를 발굴하고 내성제어 기전을 연구. 발굴된...1차년도\\n1) Microarray를 통한 선천적 TRAIL 내성 표적 후보 유전자...1) TRAIL 내성 특이적 표적분자를 발굴하고, 이를 이용한 TRAIL 효과 증진...대장암,항암제 내성,세포사멸,유전자발굴TRAIL,Colorectal cancer,TRAIL resistance,Apopt...0
\n", + "
" + ], + "text/plain": [ + " index 제출년도 사업명 사업_부처명 계속과제여부 내역사업명 \\\n", + "0 0 2016 농업기초기반연구 농촌진흥청 신규 농산물안전성연구 \n", + "1 1 2019 이공학학술연구기반구축(R&D) 교육부 신규 지역대학우수과학자지원사업(1년~5년) \n", + "\n", + " 과제명 \\\n", + "0 유전정보를 활용한 새로운 해충 분류군 동정기술 개발 \n", + "1 대장암의 TRAIL 내성 표적 인자 발굴 및 TRAIL 반응 예측 유전자 지도 구축... \n", + "\n", + " 요약문_연구목표 \\\n", + "0 ○ 새로운 해충분류군의 동정기술 개발 및 유입확산 추적 \n", + "1 최종목표: TRAIL 감수성 표적 유전자를 발굴하고 내성제어 기전을 연구. 발굴된... \n", + "\n", + " 요약문_연구내용 \\\n", + "0 (가) 외래 및 돌발해충의 발생조사 및 종 동정\\n\\n\\n ○ 대상해충 : 최... \n", + "1 1차년도\\n1) Microarray를 통한 선천적 TRAIL 내성 표적 후보 유전자... \n", + "\n", + " 요약문_기대효과 \\\n", + "0 ○ 새로운 돌발 및 외래해충의 신속, 정확한 동정법 향상\\n\\n\\n○ 돌발 및 외래... \n", + "1 1) TRAIL 내성 특이적 표적분자를 발굴하고, 이를 이용한 TRAIL 효과 증진... \n", + "\n", + " 요약문_한글키워드 \\\n", + "0 뉴클레오티드 염기서열, 분자마커, 종 동정, 침샘, 전사체 \n", + "1 대장암,항암제 내성,세포사멸,유전자발굴 \n", + "\n", + " 요약문_영문키워드 label \n", + "0 nucleotide sequence, molecular marker, species... 24 \n", + "1 TRAIL,Colorectal cancer,TRAIL resistance,Apopt... 0 " + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PPTlScQcG1Mz", + "outputId": "9d3fd575-2b8c-4cef-9168-ba492880a69c" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
index제출년도사업명사업_부처명계속과제여부내역사업명과제명요약문_연구목표요약문_연구내용요약문_기대효과요약문_한글키워드요약문_영문키워드
01743042016경제협력권산업육성산업통상자원부신규자동차융합부품R-FSSW 기술 적용 경량 차체 부품 개발 및 품질 평가를 위한 64채널 C-SC...○ 차체 점용접부의 품질 검사를 위한 64채널 무선 기반 C-Scan 탐촉자 개발\\...○ 1차년도\\n\\n . 개발 탐촉 시스템의 성능 평가 위한 표준 시편 제작 시...○ 기술적 파급효과\\n\\n - 본 연구에서 개발된 R-FSSW 접합 기술은 기존 ...마찰교반점용접, 비파괴 검사, 초음파 탐상, 씨 스캔, 용접 품질 평가Friction Stir Spot Welding, Non-destructive ev...
11743052018개인기초연구(과기정통부)(R&D)과학기술정보통신부계속신진연구(총연구비5천이상~1.5억이하)다입자계를 묘사하는 편미분방정식에 대한 연구자연계에는 입자의 개수가 아주 큰 다양한 다입자계가 존재한다. 이런 다입자계의 효...연구과제1. 무한입자계의 동역학 / 작용소(operator) 방정식에 대한 연구\\n...본 연구는 물리학에서 중요한 대상인 다입자계를 묘사하는 모델방정식의 정당성을 보장하...다체계 방정식,동역학의 안정성,양자역학,고전역학,평균장 극한,고전극한,비상대론적 극한many particle system,stability of dynamics,qua...
\n", + "
" + ], + "text/plain": [ + " index 제출년도 사업명 사업_부처명 계속과제여부 내역사업명 \\\n", + "0 174304 2016 경제협력권산업육성 산업통상자원부 신규 자동차융합부품 \n", + "1 174305 2018 개인기초연구(과기정통부)(R&D) 과학기술정보통신부 계속 신진연구(총연구비5천이상~1.5억이하) \n", + "\n", + " 과제명 \\\n", + "0 R-FSSW 기술 적용 경량 차체 부품 개발 및 품질 평가를 위한 64채널 C-SC... \n", + "1 다입자계를 묘사하는 편미분방정식에 대한 연구 \n", + "\n", + " 요약문_연구목표 \\\n", + "0 ○ 차체 점용접부의 품질 검사를 위한 64채널 무선 기반 C-Scan 탐촉자 개발\\... \n", + "1 자연계에는 입자의 개수가 아주 큰 다양한 다입자계가 존재한다. 이런 다입자계의 효... \n", + "\n", + " 요약문_연구내용 \\\n", + "0 ○ 1차년도\\n\\n . 개발 탐촉 시스템의 성능 평가 위한 표준 시편 제작 시... \n", + "1 연구과제1. 무한입자계의 동역학 / 작용소(operator) 방정식에 대한 연구\\n... \n", + "\n", + " 요약문_기대효과 \\\n", + "0 ○ 기술적 파급효과\\n\\n - 본 연구에서 개발된 R-FSSW 접합 기술은 기존 ... \n", + "1 본 연구는 물리학에서 중요한 대상인 다입자계를 묘사하는 모델방정식의 정당성을 보장하... \n", + "\n", + " 요약문_한글키워드 \\\n", + "0 마찰교반점용접, 비파괴 검사, 초음파 탐상, 씨 스캔, 용접 품질 평가 \n", + "1 다체계 방정식,동역학의 안정성,양자역학,고전역학,평균장 극한,고전극한,비상대론적 극한 \n", + "\n", + " 요약문_영문키워드 \n", + "0 Friction Stir Spot Welding, Non-destructive ev... \n", + "1 many particle system,stability of dynamics,qua... " + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "A6YGuk5WG1M1", + "outputId": "1c182dc8-faf6-415f-e0b0-84b5ad12a9c7" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
indexlabel
01743040
11743050
21743060
31743070
41743080
51743090
\n", + "
" + ], + "text/plain": [ + " index label\n", + "0 174304 0\n", + "1 174305 0\n", + "2 174306 0\n", + "3 174307 0\n", + "4 174308 0\n", + "5 174309 0" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sample_submission.head(6)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "u5X2HhFFG1M2", + "outputId": "5d907a78-c14e-4764-c746-940e1e6b6d12" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['index', '제출년도', '사업명', '사업_부처명', '계속과제여부', '내역사업명', '과제명', '요약문_연구목표',\n", + " '요약문_연구내용', '요약문_기대효과', '요약문_한글키워드', '요약문_영문키워드', 'label'],\n", + " dtype='object')" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "La4ho1nhG1M3", + "outputId": "ff5fffcd-8422-431c-9d4b-2f804dc56c05" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['index', '제출년도', '사업명', '사업_부처명', '계속과제여부', '내역사업명', '과제명', '요약문_연구목표',\n", + " '요약문_연구내용', '요약문_기대효과', '요약문_한글키워드', '요약문_영문키워드'],\n", + " dtype='object')" + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MIawLOeiG1M5", + "outputId": "f6df0485-dfb0-4a4c-93ac-9844d64b67f3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(174304, 13)\n", + "(43576, 12)\n", + "(43576, 2)\n" + ] + } + ], + "source": [ + "#데이터 구조 파악\n", + "print(train.shape)\n", + "print(test.shape)\n", + "print(sample_submission.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZVZ4A5L4G1M7", + "outputId": "a6b7b0b3-30b4-4cd6-8d07-63451d451ebc" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.817945\n", + "1 0.007234\n", + "2 0.001578\n", + "3 0.000820\n", + "4 0.000327\n", + "5 0.009742\n", + "6 0.000447\n", + "7 0.000648\n", + "8 0.001945\n", + "9 0.000608\n", + "10 0.003775\n", + "11 0.001147\n", + "12 0.001538\n", + "13 0.003299\n", + "14 0.009592\n", + "15 0.000947\n", + "16 0.002903\n", + "17 0.000884\n", + "18 0.008893\n", + "19 0.028330\n", + "20 0.006076\n", + "21 0.002846\n", + "22 0.000849\n", + "23 0.010556\n", + "24 0.020195\n", + "25 0.004647\n", + "26 0.001813\n", + "27 0.003557\n", + "28 0.002576\n", + "29 0.005898\n", + "30 0.001342\n", + "31 0.005290\n", + "32 0.001492\n", + "33 0.003058\n", + "34 0.003001\n", + "35 0.001669\n", + "36 0.006081\n", + "37 0.001526\n", + "38 0.001503\n", + "39 0.001159\n", + "40 0.002530\n", + "41 0.000384\n", + "42 0.000293\n", + "43 0.002014\n", + "44 0.000522\n", + "45 0.006523\n", + "Name: label, dtype: float64" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#심각한 불균형 데이터임을 알 수 있습니다.\n", + "train.label.value_counts(sort=False)/len(train)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eqYZQAZnG1M7", + "outputId": "3e0ffe9a-356d-45e4-ae8e-f3b7c78cd1ad" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "과제명 길이 최댓값: 229\n", + "과제명 길이 최솟값: 2\n", + "과제명 길이 평균값: 35.84252225995961\n", + "과제명 길이 중간값: 34.0\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "length=train['과제명'].astype(str).apply(len)\n", + "plt.hist(length, bins=50, alpha=0.5, color='r', label='word')\n", + "plt.title('histogram of length of task_name')\n", + "plt.figure(figsize=(12, 5))\n", + "plt.boxplot(length, labels=['counts'], showmeans=True)\n", + "print('과제명 길이 최댓값: {}'.format(np.max(length)))\n", + "print('과제명 길이 최솟값: {}'.format(np.min(length)))\n", + "print('과제명 길이 평균값: {}'.format(np.mean(length)))\n", + "print('과제명 길이 중간값: {}'.format(np.median(length)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Pv-MWn4vG1M8", + "outputId": "52d4b890-f122-4be6-a8f9-cd84cb248bd1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "요약문_연구목표 길이 최댓값: 3951\n", + "요약문_연구목표 길이 최솟값: 1\n", + "요약문_연구목표 길이 평균값: 318.1008066366807\n", + "요약문_연구목표 길이 중간값: 249.0\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "length=train['요약문_연구목표'].astype(str).apply(len)\n", + "plt.hist(length, bins=50, alpha=0.5, color='r', label='word')\n", + "plt.title('histogram of length of summary_object')\n", + "plt.figure(figsize=(12, 5))\n", + "plt.boxplot(length, labels=['counts'], showmeans=True)\n", + "print('요약문_연구목표 길이 최댓값: {}'.format(np.max(length)))\n", + "print('요약문_연구목표 길이 최솟값: {}'.format(np.min(length)))\n", + "print('요약문_연구목표 길이 평균값: {}'.format(np.mean(length)))\n", + "print('요약문_연구목표 길이 중간값: {}'.format(np.median(length)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "o1kWtNfSG1M9", + "outputId": "0d753fdd-38a6-48bd-bfe9-1f38d1bc7db3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "요약문_연구내용 길이 최댓값: 3999\n", + "요약문_연구내용 길이 최솟값: 1\n", + "요약문_연구내용 길이 평균값: 699.2930282724435\n", + "요약문_연구내용 길이 중간값: 597.0\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "length=train['요약문_연구내용'].astype(str).apply(len)\n", + "plt.hist(length, bins=50, alpha=0.5, color='r', label='word')\n", + "plt.title('histogram of length of summary_content')\n", + "plt.figure(figsize=(12, 5))\n", + "plt.boxplot(length, labels=['counts'], showmeans=True)\n", + "print('요약문_연구내용 길이 최댓값: {}'.format(np.max(length)))\n", + "print('요약문_연구내용 길이 최솟값: {}'.format(np.min(length)))\n", + "print('요약문_연구내용 길이 평균값: {}'.format(np.mean(length)))\n", + "print('요약문_연구내용 길이 중간값: {}'.format(np.median(length)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PcOSA2UrG1M-", + "outputId": "facd11fa-2a9e-45d4-8c0e-a5169bd3aee1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "요약문_기대효과 길이 최댓값: 3649\n", + "요약문_기대효과 길이 최솟값: 1\n", + "요약문_기대효과 길이 평균값: 400.4864374885258\n", + "요약문_기대효과 길이 중간값: 329.0\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "length=train['요약문_기대효과'].astype(str).apply(len)\n", + "plt.hist(length, bins=50, alpha=0.5, color='r', label='word')\n", + "plt.title('histogram of length of summary_effect')\n", + "plt.figure(figsize=(12, 5))\n", + "plt.boxplot(length, labels=['counts'], showmeans=True)\n", + "print('요약문_기대효과 길이 최댓값: {}'.format(np.max(length)))\n", + "print('요약문_기대효과 길이 최솟값: {}'.format(np.min(length)))\n", + "print('요약문_기대효과 길이 평균값: {}'.format(np.mean(length)))\n", + "print('요약문_기대효과 길이 중간값: {}'.format(np.median(length)))" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **LSTM**" + ], + "metadata": { + "id": "ucpfx1v_HSjB" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2IrIyNptG1M-" + }, + "source": [ + "### 데이터 전처리" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z6iLCH-AG1M_" + }, + "outputs": [], + "source": [ + "#해당 baseline 에서는 과제명 columns만 활용했습니다.\n", + "#다채로운 변수 활용법으로 성능을 높여주세요!\n", + "train=train[['과제명','label']]\n", + "test=test[['과제명']]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4Npx79nOG1M_", + "outputId": "37cd562c-68e6-44ae-9e90-022088e77278" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
과제명label
0유전정보를 활용한 새로운 해충 분류군 동정기술 개발24
1대장암의 TRAIL 내성 표적 인자 발굴 및 TRAIL 반응 예측 유전자 지도 구축...0
\n", + "
" + ], + "text/plain": [ + " 과제명 label\n", + "0 유전정보를 활용한 새로운 해충 분류군 동정기술 개발 24\n", + "1 대장암의 TRAIL 내성 표적 인자 발굴 및 TRAIL 반응 예측 유전자 지도 구축... 0" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EQ2nhDZdG1NA", + "outputId": "964c1a54-38f8-4f64-c421-8e83b1f996f1" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
과제명
0R-FSSW 기술 적용 경량 차체 부품 개발 및 품질 평가를 위한 64채널 C-SC...
1다입자계를 묘사하는 편미분방정식에 대한 연구
\n", + "
" + ], + "text/plain": [ + " 과제명\n", + "0 R-FSSW 기술 적용 경량 차체 부품 개발 및 품질 평가를 위한 64채널 C-SC...\n", + "1 다입자계를 묘사하는 편미분방정식에 대한 연구" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oQ5sdNpQG1NB" + }, + "outputs": [], + "source": [ + "#1. re.sub 한글 및 공백을 제외한 문자 제거\n", + "#2. okt 객체를 활용해 형태소 단위로 나눔\n", + "#3. remove_stopwords로 불용어 제거 \n", + "def preprocessing(text, okt, remove_stopwords=False, stop_words=[]):\n", + " text=re.sub(\"[^가-힣ㄱ-ㅎㅏ-ㅣ]\",\"\", text)\n", + " word_text=okt.morphs(text, stem=True)\n", + " if remove_stopwords:\n", + " word_review=[token for token in word_text if not token in stop_words]\n", + " return word_review" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5tCWzJBuG1NB" + }, + "outputs": [], + "source": [ + "stop_words=['은','는','이','가', '하','아','것','들','의','있','되','수','보','주','등','한']\n", + "okt=Okt()\n", + "clean_train_text=[]\n", + "clean_test_text=[]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cFLVPiRsG1NC", + "outputId": "cc0b1362-5efa-4301-eddb-92223f4e5f18" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 174304/174304 [57:37<00:00, 50.41it/s] \n" + ] + } + ], + "source": [ + "#시간이 많이 걸립니다.\n", + "for text in tqdm.tqdm(train['과제명']):\n", + " try:\n", + " clean_train_text.append(preprocessing(text, okt, remove_stopwords=True, stop_words=stop_words))\n", + " except:\n", + " clean_train_text.append([])\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "w_yEivdjG1ND", + "outputId": "ea9f9eac-055e-45b9-ac4a-b6ab8515e43e" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 43576/43576 [15:29<00:00, 46.89it/s]\n" + ] + } + ], + "source": [ + "for text in tqdm.tqdm(test['과제명']):\n", + " if type(text) == str:\n", + " clean_test_text.append(preprocessing(text, okt, remove_stopwords=True, stop_words=stop_words))\n", + " else:\n", + " clean_test_text.append([])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "84acpVlTG1NE", + "outputId": "cc1de942-2469-40bf-f0c6-67d027560c0b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "174304\n", + "43576\n" + ] + } + ], + "source": [ + "print(len(clean_train_text))\n", + "print(len(clean_test_text))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NE1hBG3cG1NF" + }, + "outputs": [], + "source": [ + "#텐서플로의 전처리 모듈을 활용해 토크나이징 객체를 만든 후 인덱스 벡터로 전환\n", + "tokenizer=Tokenizer()\n", + "tokenizer.fit_on_texts(clean_train_text)\n", + "\n", + "train_sequences=tokenizer.texts_to_sequences(clean_train_text)\n", + "test_sequences=tokenizer.texts_to_sequences(clean_test_text)\n", + "word_vocab=tokenizer.word_index\n", + "\n", + "#패딩 처리\n", + "train_inputs=pad_sequences(train_sequences, maxlen=40, padding='post')\n", + "test_inputs=pad_sequences(test_sequences, maxlen=40, padding='post')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kYOnEW9-G1NF", + "outputId": "30b67abc-6d1d-4c63-dde0-a4743648af9f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(174304, 40)\n", + "(43576, 40)\n" + ] + } + ], + "source": [ + "print(train_inputs.shape)\n", + "print(test_inputs.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bhBj7XNUG1NF", + "outputId": "0eb18922-9be8-4149-8772-d60db2dd5ada" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "46" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "labels=np.array(train['label'])\n", + "len(set(labels))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3urpeS40G1NG" + }, + "outputs": [], + "source": [ + "#추후 재사용 가능하도록 npy로 전환\n", + "DATA_IN_PATH='./data_in/'\n", + "TRAIN_INPUT_DATA = 'train_input.npy'\n", + "TEST_INPUT_DATA = 'test_input.npy'\n", + "\n", + "import os\n", + "if not os.path.exists(DATA_IN_PATH):\n", + " os.makedirs(DATA_IN_PATH)\n", + " \n", + "np.save(open(DATA_IN_PATH+TRAIN_INPUT_DATA, 'wb'), train_inputs)\n", + "np.save(open(DATA_IN_PATH+TEST_INPUT_DATA, 'wb'), test_inputs)\n", + "\n", + "data_configs={}\n", + "data_configs['vocab']=word_vocab\n", + "data_configs['vocab_size'] = len(word_vocab)+1\n", + "json.dump(data_configs, open(DATA_IN_PATH+'data_configs.json', 'w'), ensure_ascii=False)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 모델링" + ], + "metadata": { + "id": "utV-fRXBHpaA" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "K2DAGLmCG1NH" + }, + "outputs": [], + "source": [ + "#파라미터 설정\n", + "vocab_size =data_configs['vocab_size']\n", + "embedding_dim = 32\n", + "max_length = 40\n", + "oov_tok = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xQlBPyhTG1NI", + "outputId": "f5c87b32-bbe5-41a4-a949-dffc68f250e7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_1\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "embedding_1 (Embedding) (None, 40, 32) 973376 \n", + "_________________________________________________________________\n", + "global_average_pooling1d_1 ( (None, 32) 0 \n", + "_________________________________________________________________\n", + "dense_2 (Dense) (None, 128) 4224 \n", + "_________________________________________________________________\n", + "dense_3 (Dense) (None, 46) 5934 \n", + "=================================================================\n", + "Total params: 983,534\n", + "Trainable params: 983,534\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "None\n" + ] + } + ], + "source": [ + "#가벼운 NLP모델 생성\n", + "model = tf.keras.Sequential([\n", + " tf.keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length),\n", + " tf.keras.layers.GlobalAveragePooling1D(),\n", + " tf.keras.layers.Dense(128, activation='relu'),\n", + " tf.keras.layers.Dense(46, activation='softmax')\n", + "])\n", + "\n", + "# compile model\n", + "model.compile(loss='sparse_categorical_crossentropy',\n", + " optimizer='adam',\n", + " metrics=['accuracy'])\n", + "\n", + "# model summary\n", + "print(model.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sWMYG1l2G1NJ", + "outputId": "d7b06c79-2ad2-4f76-819a-ef2db4b8cefa" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "4358/4358 - 28s - loss: 0.9296 - accuracy: 0.8202 - val_loss: 0.8065 - val_accuracy: 0.8248\n", + "Epoch 2/30\n", + "4358/4358 - 24s - loss: 0.6618 - accuracy: 0.8400 - val_loss: 0.6244 - val_accuracy: 0.8463\n", + "Epoch 3/30\n", + "4358/4358 - 25s - loss: 0.5196 - accuracy: 0.8643 - val_loss: 0.5572 - val_accuracy: 0.8582\n", + "Epoch 4/30\n", + "4358/4358 - 24s - loss: 0.4356 - accuracy: 0.8810 - val_loss: 0.5206 - val_accuracy: 0.8663\n", + "Epoch 5/30\n", + "4358/4358 - 25s - loss: 0.3740 - accuracy: 0.8946 - val_loss: 0.4925 - val_accuracy: 0.8742\n", + "Epoch 6/30\n", + "4358/4358 - 25s - loss: 0.3273 - accuracy: 0.9061 - val_loss: 0.4862 - val_accuracy: 0.8788\n", + "Epoch 7/30\n", + "4358/4358 - 24s - loss: 0.2925 - accuracy: 0.9148 - val_loss: 0.4805 - val_accuracy: 0.8818\n", + "Epoch 8/30\n", + "4358/4358 - 25s - loss: 0.2648 - accuracy: 0.9218 - val_loss: 0.4684 - val_accuracy: 0.8866\n", + "Epoch 9/30\n", + "4358/4358 - 24s - loss: 0.2407 - accuracy: 0.9283 - val_loss: 0.4734 - val_accuracy: 0.8909\n", + "Epoch 10/30\n", + "4358/4358 - 25s - loss: 0.2210 - accuracy: 0.9341 - val_loss: 0.4924 - val_accuracy: 0.8855\n", + "Epoch 11/30\n", + "4358/4358 - 24s - loss: 0.2043 - accuracy: 0.9384 - val_loss: 0.4894 - val_accuracy: 0.8921\n", + "Epoch 12/30\n", + "4358/4358 - 24s - loss: 0.1898 - accuracy: 0.9424 - val_loss: 0.4938 - val_accuracy: 0.8921\n", + "Epoch 13/30\n", + "4358/4358 - 24s - loss: 0.1765 - accuracy: 0.9464 - val_loss: 0.5126 - val_accuracy: 0.8935\n", + "Epoch 14/30\n", + "4358/4358 - 25s - loss: 0.1652 - accuracy: 0.9491 - val_loss: 0.5247 - val_accuracy: 0.8926\n", + "Epoch 15/30\n", + "4358/4358 - 25s - loss: 0.1552 - accuracy: 0.9523 - val_loss: 0.5314 - val_accuracy: 0.8932\n", + "Epoch 16/30\n", + "4358/4358 - 25s - loss: 0.1459 - accuracy: 0.9552 - val_loss: 0.5397 - val_accuracy: 0.8960\n", + "Epoch 17/30\n", + "4358/4358 - 24s - loss: 0.1376 - accuracy: 0.9573 - val_loss: 0.5556 - val_accuracy: 0.8939\n", + "Epoch 18/30\n", + "4358/4358 - 24s - loss: 0.1295 - accuracy: 0.9592 - val_loss: 0.5693 - val_accuracy: 0.8932\n", + "Epoch 19/30\n", + "4358/4358 - 24s - loss: 0.1232 - accuracy: 0.9612 - val_loss: 0.5777 - val_accuracy: 0.8952\n", + "Epoch 20/30\n", + "4358/4358 - 25s - loss: 0.1162 - accuracy: 0.9629 - val_loss: 0.5951 - val_accuracy: 0.8956\n", + "Epoch 21/30\n", + "4358/4358 - 24s - loss: 0.1105 - accuracy: 0.9647 - val_loss: 0.6128 - val_accuracy: 0.8970\n", + "Epoch 22/30\n", + "4358/4358 - 25s - loss: 0.1052 - accuracy: 0.9666 - val_loss: 0.6324 - val_accuracy: 0.8956\n", + "Epoch 23/30\n", + "4358/4358 - 24s - loss: 0.1002 - accuracy: 0.9681 - val_loss: 0.6410 - val_accuracy: 0.8933\n", + "Epoch 24/30\n", + "4358/4358 - 25s - loss: 0.0957 - accuracy: 0.9698 - val_loss: 0.6635 - val_accuracy: 0.8958\n", + "Epoch 25/30\n", + "4358/4358 - 24s - loss: 0.0914 - accuracy: 0.9705 - val_loss: 0.6841 - val_accuracy: 0.8991\n", + "Epoch 26/30\n", + "4358/4358 - 24s - loss: 0.0874 - accuracy: 0.9719 - val_loss: 0.6902 - val_accuracy: 0.8952\n", + "Epoch 27/30\n", + "4358/4358 - 24s - loss: 0.0838 - accuracy: 0.9732 - val_loss: 0.7118 - val_accuracy: 0.8938\n", + "Epoch 28/30\n", + "4358/4358 - 24s - loss: 0.0805 - accuracy: 0.9742 - val_loss: 0.7211 - val_accuracy: 0.8943\n", + "Epoch 29/30\n", + "4358/4358 - 24s - loss: 0.0771 - accuracy: 0.9748 - val_loss: 0.7344 - val_accuracy: 0.8949\n", + "Epoch 30/30\n", + "4358/4358 - 24s - loss: 0.0739 - accuracy: 0.9759 - val_loss: 0.7569 - val_accuracy: 0.8958\n" + ] + } + ], + "source": [ + "# fit model\n", + "num_epochs = 30\n", + "history = model.fit(train_inputs, labels, \n", + " epochs=num_epochs, verbose=2, \n", + " validation_split=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ghEALrTSG1NM" + }, + "outputs": [], + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Random Forest**" + ], + "metadata": { + "id": "XOonBmHOHVHn" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 데이터 전처리" + ], + "metadata": { + "id": "Vi0yyjMWHX3u" + } + }, + { + "cell_type": "code", + "source": [ + "" + ], + "metadata": { + "id": "5mCIk7axH6Yj" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "A8alJB_FIGTr" + }, + "outputs": [], + "source": [ + "#해당 baseline 에서는 과제명 columns만 활용했습니다.\n", + "#다채로운 변수 활용법으로 성능을 높여주세요!\n", + "train=train[['과제명','label']]\n", + "test=test[['과제명']]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gW0S2UvlIGTs", + "outputId": "064133e1-7d09-4d42-f46c-6ff8f0c62771" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
과제명label
0유전정보를 활용한 새로운 해충 분류군 동정기술 개발24
1대장암의 TRAIL 내성 표적 인자 발굴 및 TRAIL 반응 예측 유전자 지도 구축...0
\n", + "
" + ], + "text/plain": [ + " 과제명 label\n", + "0 유전정보를 활용한 새로운 해충 분류군 동정기술 개발 24\n", + "1 대장암의 TRAIL 내성 표적 인자 발굴 및 TRAIL 반응 예측 유전자 지도 구축... 0" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CBnQx5cxIGTs", + "outputId": "486c9a8f-cba5-42e0-a9c6-50f27152dd1f" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
과제명
0R-FSSW 기술 적용 경량 차체 부품 개발 및 품질 평가를 위한 64채널 C-SC...
1다입자계를 묘사하는 편미분방정식에 대한 연구
\n", + "
" + ], + "text/plain": [ + " 과제명\n", + "0 R-FSSW 기술 적용 경량 차체 부품 개발 및 품질 평가를 위한 64채널 C-SC...\n", + "1 다입자계를 묘사하는 편미분방정식에 대한 연구" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RWSlxo0JIGTt" + }, + "outputs": [], + "source": [ + "#1. re.sub 한글 및 공백을 제외한 문자 제거\n", + "#2. okt 객체를 활용해 형태소 단위로 나눔\n", + "#3. remove_stopwords로 불용어 제거 \n", + "def preprocessing(text, okt, remove_stopwords=False, stop_words=[]):\n", + " text=re.sub(\"[^가-힣ㄱ-ㅎㅏ-ㅣ]\",\"\", text)\n", + " word_text=okt.morphs(text, stem=True)\n", + " if remove_stopwords:\n", + " word_review=[token for token in word_text if not token in stop_words]\n", + " return word_review" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9cDCnAoHIGTt" + }, + "outputs": [], + "source": [ + "stop_words=['은','는','이','가', '하','아','것','들','의','있','되','수','보','주','등','한']\n", + "okt=Okt()\n", + "clean_train_text=[]\n", + "clean_test_text=[]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "w6U0yg-DIGTt", + "outputId": "1bb37197-d9ea-414c-ef12-6912c4f265b3" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 174304/174304 [44:25<00:00, 65.39it/s]\n" + ] + } + ], + "source": [ + "#시간이 많이 걸립니다.\n", + "for text in tqdm.tqdm(train['과제명']):\n", + " try:\n", + " clean_train_text.append(preprocessing(text, okt, remove_stopwords=True, stop_words=stop_words))\n", + " except:\n", + " clean_train_text.append([])\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "S4lSvNu8IGTu", + "outputId": "34f1f138-d366-4f18-90c8-39daa298b881" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 43576/43576 [12:25<00:00, 58.44it/s]\n" + ] + } + ], + "source": [ + "for text in tqdm.tqdm(test['과제명']):\n", + " if type(text) == str:\n", + " clean_test_text.append(preprocessing(text, okt, remove_stopwords=True, stop_words=stop_words))\n", + " else:\n", + " clean_test_text.append([])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3hPs3U5fIGTu", + "outputId": "7eb3caea-c7e3-4e71-9500-5770aa45bf18" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "174304" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(clean_train_text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SIdIkfDUIGTv", + "outputId": "f1fdff7e-80d4-448f-b029-7a8cff8c87a1" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "43576" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(clean_test_text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fa7oyP3sIGTv" + }, + "outputs": [], + "source": [ + "from sklearn.feature_extraction.text import CountVectorizer\n", + "\n", + "#tokenizer 인자에는 list를 받아서 그대로 내보내는 함수를 넣어줍니다. 또한 소문자화를 하지 않도록 설정해야 에러가 나지 않습니다.\n", + "vectorizer = CountVectorizer(tokenizer = lambda x: x, lowercase=False)\n", + "train_features=vectorizer.fit_transform(clean_train_text)\n", + "test_features=vectorizer.transform(clean_test_text)\n", + "#test데이터에 fit_transform을 할 경우 data leakage에 해당합니다" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C5ggldyZIGTv", + "outputId": "82ad1ae9-7655-408c-b7fe-40c21ec5338b" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<174304x30402 sparse matrix of type ''\n", + "\twith 2078154 stored elements in Compressed Sparse Row format>" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jTjDVp34IGTx", + "outputId": "420b3690-bdb0-4597-ba6f-085fdaf56f51" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<43576x30402 sparse matrix of type ''\n", + "\twith 518549 stored elements in Compressed Sparse Row format>" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_features" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 모델링" + ], + "metadata": { + "id": "f863vntlH5Dj" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kvD_8pQxIGTx" + }, + "outputs": [], + "source": [ + "#훈련 데이터 셋과 검증 데이터 셋으로 분리\n", + "TEST_SIZE=0.2\n", + "RANDOM_SEED=42\n", + "\n", + "train_x, eval_x, train_y, eval_y=train_test_split(train_features, train['label'], test_size=TEST_SIZE, random_state=RANDOM_SEED)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NpkZXZYjIGTy", + "outputId": "07e32f89-c40a-4f2f-bccf-531efd343ce7" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestClassifier()" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#랜덤포레스트로 모델링\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "forest=RandomForestClassifier(n_estimators=100)\n", + "\n", + "forest.fit(train_x, train_y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e0IGwIxkIGTy", + "outputId": "9f1f6ee9-f857-4f87-85f5-8a9bdf0ea491" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9208571182696996" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#모델 검증\n", + "forest.score(eval_x, eval_y)" + ] + }, + { + "cell_type": "code", + "source": [ + "" + ], + "metadata": { + "id": "pJ2IqM8NH3R1" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# **BERT**" + ], + "metadata": { + "id": "x8d1D0nWIQJT" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 데이터 전처리" + ], + "metadata": { + "id": "DxxAGGA4IT4N" + } + }, + { + "cell_type": "code", + "source": [ + "os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"0\"" + ], + "metadata": { + "id": "rd3cngTxIVIY" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#이번 베이스라인에서는 과제명 뿐만 아니라 요약문_연구내용도 모델에 학습시켜보겠습니다.\n", + "train=train[['과제명', '요약문_연구내용','label']]\n", + "test=test[['과제명', '요약문_연구내용']]\n", + "train['요약문_연구내용'].fillna('NAN', inplace=True)\n", + "test['요약문_연구내용'].fillna('NAN', inplace=True)" + ], + "metadata": { + "id": "k2agNPbaIdHG" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train['data']=train['과제명']+train['요약문_연구내용']\n", + "test['data']=test['과제명']+test['요약문_연구내용']" + ], + "metadata": { + "id": "NMeLNm9lIdEu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(train.shape)\n", + "print(test.shape)" + ], + "metadata": { + "id": "vE4wzCvXIdCG" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train.head(2)" + ], + "metadata": { + "id": "Ywue1y5dIh3W" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "test.head(2)" + ], + "metadata": { + "id": "oY3pTBoNIh1N" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 모델링" + ], + "metadata": { + "id": "n95Q74jaIVol" + } + }, + { + "cell_type": "code", + "source": [ + "#random seed 고정\n", + "tf.random.set_seed(1234)\n", + "np.random.seed(1234)\n", + "BATCH_SIZE = 32\n", + "NUM_EPOCHS = 3\n", + "VALID_SPLIT = 0.2\n", + "MAX_LEN=200" + ], + "metadata": { + "id": "1xx-icJUIWXp" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from transformers import *\n", + "tokenizer=BertTokenizer.from_pretrained('bert-base-multilingual-cased', cache_dir='bert_ckpt', do_lower_case=False)\n", + "\n", + "def bert_tokenizer(sent, MAX_LEN):\n", + " \n", + " encoded_dict=tokenizer.encode_plus(\n", + " text = sent, \n", + " add_special_tokens=True, \n", + " max_length=MAX_LEN, \n", + " pad_to_max_length=True, \n", + " return_attention_mask=True,\n", + " truncation = True)\n", + " \n", + " input_id=encoded_dict['input_ids']\n", + " attention_mask=encoded_dict['attention_mask']\n", + " token_type_id = encoded_dict['token_type_ids']\n", + " \n", + " return input_id, attention_mask, token_type_id\n", + "\n", + "input_ids =[]\n", + "attention_masks =[]\n", + "token_type_ids =[]\n", + "train_data_labels = []\n", + "\n", + "def clean_text(sent):\n", + " sent_clean=re.sub(\"[^가-힣ㄱ-하-ㅣ]\", \" \", sent)\n", + " return sent_clean\n", + "\n", + "for train_sent, train_label in zip(train['data'], train['label']):\n", + " try:\n", + " input_id, attention_mask, token_type_id = bert_tokenizer(clean_text(train_sent), MAX_LEN=MAX_LEN)\n", + " \n", + " input_ids.append(input_id)\n", + " attention_masks.append(attention_mask)\n", + " token_type_ids.append(token_type_id)\n", + " #########################################\n", + " train_data_labels.append(train_label)\n", + " \n", + " except Exception as e:\n", + " print(e)\n", + " print(train_sent)\n", + " pass\n", + "\n", + "train_input_ids=np.array(input_ids, dtype=int)\n", + "train_attention_masks=np.array(attention_masks, dtype=int)\n", + "train_token_type_ids=np.array(token_type_ids, dtype=int)\n", + "###########################################################\n", + "train_inputs=(train_input_ids, train_attention_masks, train_token_type_ids)\n", + "train_labels=np.asarray(train_data_labels, dtype=np.int32)" + ], + "metadata": { + "id": "rLNzrvewIoS2" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(train_input_ids[1])\n", + "print(train_attention_masks[1])\n", + "print(train_token_type_ids[1])\n", + "print(tokenizer.decode(train_input_ids[1]))" + ], + "metadata": { + "id": "9GHbUZ0cIoQV" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "class TFBertClassifier(tf.keras.Model):\n", + " def __init__(self, model_name, dir_path, num_class):\n", + " super(TFBertClassifier, self).__init__()\n", + "\n", + " self.bert = TFBertModel.from_pretrained(model_name, cache_dir=dir_path)\n", + " self.dropout = tf.keras.layers.Dropout(self.bert.config.hidden_dropout_prob)\n", + " self.classifier = tf.keras.layers.Dense(num_class, \n", + " kernel_initializer=tf.keras.initializers.TruncatedNormal(self.bert.config.initializer_range), \n", + " name=\"classifier\")\n", + " \n", + " def call(self, inputs, attention_mask=None, token_type_ids=None, training=False):\n", + " \n", + " #outputs 값: # sequence_output, pooled_output, (hidden_states), (attentions)\n", + " outputs = self.bert(inputs, attention_mask=attention_mask, token_type_ids=token_type_ids)\n", + " pooled_output = outputs[1] \n", + " pooled_output = self.dropout(pooled_output, training=training)\n", + " logits = self.classifier(pooled_output)\n", + "\n", + " return logits\n", + "\n", + "cls_model = TFBertClassifier(model_name='bert-base-multilingual-cased',\n", + " dir_path='bert_ckpt',\n", + " num_class=46)\n", + "\n", + "# 학습 준비하기\n", + "optimizer = tf.keras.optimizers.Adam(3e-5)\n", + "loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)\n", + "metric = tf.keras.metrics.SparseCategoricalAccuracy('accuracy')\n", + "cls_model.compile(optimizer=optimizer, loss=loss, metrics=[metric])\n", + "\n", + "model_name = \"tf2_bert_classifier\"\n", + "\n", + "# overfitting을 막기 위한 ealrystop 추가\n", + "earlystop_callback = EarlyStopping(monitor='val_accuracy', min_delta=0.0001,patience=5)\n", + "# min_delta: the threshold that triggers the termination (acc should at least improve 0.0001)\n", + "# patience: no improvment epochs (patience = 1, 1번 이상 상승이 없으면 종료)\\\n", + "\n", + "checkpoint_path = os.path.join(model_name, 'weights.h5')\n", + "checkpoint_dir = os.path.dirname(checkpoint_path)\n", + "\n", + "# Create path if exists\n", + "if os.path.exists(checkpoint_dir):\n", + " print(\"{} -- Folder already exists \\n\".format(checkpoint_dir))\n", + "else:\n", + " os.makedirs(checkpoint_dir, exist_ok=True)\n", + " print(\"{} -- Folder create complete \\n\".format(checkpoint_dir))\n", + " \n", + "cp_callback = ModelCheckpoint(\n", + " checkpoint_path, monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=True)\n", + "\n", + "# 학습과 eval 시작\n", + "history = cls_model.fit(train_inputs, train_labels, epochs=30, batch_size=32,\n", + " validation_split = VALID_SPLIT, callbacks=[earlystop_callback, cp_callback])" + ], + "metadata": { + "id": "9n9ltFsAIoN8" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "input_ids =[]\n", + "attention_masks =[]\n", + "token_type_ids =[]\n", + "train_data_labels = []\n", + "\n", + "def clean_text(sent):\n", + " sent_clean=re.sub(\"[^가-힣ㄱ-하-ㅣ]\", \" \", sent)\n", + " return sent_clean\n", + "\n", + "for test_sent in test['data']:\n", + " try:\n", + " input_id, attention_mask, token_type_id = bert_tokenizer(clean_text(test_sent), MAX_LEN=40)\n", + " \n", + " input_ids.append(input_id)\n", + " attention_masks.append(attention_mask)\n", + " token_type_ids.append(token_type_id)\n", + " #########################################\n", + " \n", + " except Exception as e:\n", + " print(e)\n", + " print(test_sent)\n", + " pass\n", + " \n", + "test_input_ids=np.array(input_ids, dtype=int)\n", + "test_attention_masks=np.array(attention_masks, dtype=int)\n", + "test_token_type_ids=np.array(token_type_ids, dtype=int)\n", + "###########################################################\n", + "test_inputs=(test_input_ids, test_attention_masks, test_token_type_ids)" + ], + "metadata": { + "id": "_zpCG4FgIoLi" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "results = cls_model.predict(test_inputs)\n", + "results=tf.argmax(results, axis=1)" + ], + "metadata": { + "id": "0pVNINyQIoJA" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "" + ], + "metadata": { + "id": "isBxHC64IxK8" + }, + "execution_count": null, + "outputs": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "junyoung", + "language": "python", + "name": "junyoung" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + }, + "colab": { + "name": "week19_김희숙_예습과제.ipynb", + "provenance": [] + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file