{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":80687,"databundleVersionId":8672016,"sourceType":"competition"}],"dockerImageVersionId":30698,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"- 이 코드는 완벽하지 않아요\n- roc-auc 평가지표일 때 predict과 predict_proba를 비교해보세요\n- 검증데이터를 사용해보세요!","metadata":{}},{"cell_type":"markdown","source":"2013년 9월 유럽 신용카드 사용자들의 거래 내역을 포함하고 있습니다.\n\n이 데이터셋은 이틀 간의 거래 내역으로 데이터셋은 크게 불균형하며, 사기 거래(양성 클래스)는 전체 거래의 약 0.17%에 불과합니다.\n\n\n이 데이터셋은 PCA 변환을 거친 수치형 변수들만 포함하고 있습니다. 안타깝게도 기밀 유지 문제로 인해 원본 특징과 데이터에 대한 자세한 배경 정보는 제공할 수 없습니다. V1, V2, …,\n\nV28은 PCA로 얻은 주성분이며, PCA 변환을 거치지 않은 유일한 특징은 'Time'과 'Amount'입니다. 'Time'은 각 거래와 데이터셋의 첫 거래 사이의 경과 시간(초)을 나타내며, \n\n'Amount'는 거래 금액입니다. 'Amount' 특징은 예시 의존적 비용 민감 학습 등에 사용될 수 있습니다. 'Class'는 응답 변수로, 사기 거래인 경우 1, 그렇지 않은 경우 0의 값을 가집니다.\n\n클래스 불균형 비율을 고려하여, 정밀도-재현율 곡선 아래 영역(AUPRC)을 사용하여 정확도를 측정할 것을 권장합니다. 불균형 분류에서는 혼동 행렬 정확도가 큰 의미가 없습니다.","metadata":{}},{"cell_type":"markdown","source":"코드 탭에서 \"new notebook\"으로 문제 풀기 (생성된 csv파일 다운로드)\n\n예측한 csv파일 \"Submit Predictions\"하기\n\n[분류] 신용카드 사기 거래를 탐지\n\n예측할 값(y): Class (0:Not fraud, 1:fraud)\n\n평가: roc-auc 평가지표\n\n제출 형식 (fraud의 확률값)","metadata":{}},{"cell_type":"code","source":"# 데이터 불러오기\nimport pandas as pd\ntrain = pd.read_csv(\"/kaggle/input/big-data-analytics-certification-kr-2024-2/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/big-data-analytics-certification-kr-2024-2/test.csv\")\n\n# 필요없는 칼럼 제거\ny = train['Class']\nX = train.drop(['id','Class'], axis=1)\ntest_X = test.drop(['id'], axis=1)\n\n# train_test_split\nfrom sklearn.model_selection import train_test_split\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=0)\n\nfrom sklearn.ensemble import RandomForestClassifier\nrf = RandomForestClassifier(max_depth=8, random_state=0)\nprint('model fitting')\nrf.fit(X_train, y_train)\npred = rf.predict(X_val)\nprint('complete prediction')\n\nfrom sklearn.metrics import *\nprint(confusion_matrix(y_val,pred))\nprint(classification_report(y_val,pred))\n\npred2 = rf.predict(test_X)\nresult = pd.DataFrame({'id': test['id'], 'Class': pred2})\nresult.to_csv('randomforest.csv', index=False)\npd.read_csv('randomforest.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-24T11:29:57.652246Z","iopub.execute_input":"2024-11-24T11:29:57.652580Z","iopub.status.idle":"2024-11-24T11:31:12.431466Z","shell.execute_reply.started":"2024-11-24T11:29:57.652553Z","shell.execute_reply":"2024-11-24T11:31:12.430430Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.metrics import roc_curve\nfpr, tpr, thresholds = roc_curve(y_val, pred) # input 순서 : 실제 라벨, 예측 값\n\nimport matplotlib.pyplot as plt\nplt.plot(fpr, tpr)\nplt.xlabel('FP Rate')\nplt.ylabel('TP Rate')\nplt.show()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\ntrain = pd.read_csv(\"/kaggle/input/big-data-analytics-certification-kr-2024-2/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/big-data-analytics-certification-kr-2024-2/test.csv\")\n\ny = train.pop('Class')\nx = train.drop('id', axis=1)\n\nfrom sklearn.model_selection import train_test_split\nx_train, x_val, y_train, y_val = train_test_split(x,y, test_size=0.3, random_state=0)\n\nfrom lightgbm import LGBMClassifier\nlgbm = LGBMClassifier(random_state=0, n_estimators=200)\nlgbm.fit(x_train, y_train)\npred2 = lgbm.predict(x_val)\n\n# 테스트 데이터에 대한 평가\nfrom sklearn.metrics import *\nprint(classification_report(y_val, pred2))\n\n\n# 결과 제출\nid = test.pop('id')\nresult = lgbm.predict(test)\n\n# 제출 파일 생성\nsubmission = pd.DataFrame({'id':id, 'class': result})\nsubmission.to_csv('lgbm.csv', index=False)\npd.read_csv('lgbm.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-24T11:29:47.507014Z","iopub.execute_input":"2024-11-24T11:29:47.507853Z","iopub.status.idle":"2024-11-24T11:29:57.650662Z","shell.execute_reply.started":"2024-11-24T11:29:47.507814Z","shell.execute_reply":"2024-11-24T11:29:57.649564Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.metrics import roc_curve\nfpr, tpr, thresholds = roc_curve(y_val, pred2) # input 순서 : 실제 라벨, 예측 값\n\nimport matplotlib.pyplot as plt\nplt.plot(fpr, tpr)\nplt.xlabel('FP Rate')\nplt.ylabel('TP Rate')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-11-24T11:23:50.519284Z","iopub.status.idle":"2024-11-24T11:23:50.519697Z","shell.execute_reply.started":"2024-11-24T11:23:50.519505Z","shell.execute_reply":"2024-11-24T11:23:50.519519Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}