<jupyter_start><jupyter_text>Classification - 신용카드 사기 검출reference : https://www.kaggle.com/mlg-ulb/creditcardfraud/data            목적 신용카드사는 고객의 비정상적인 카드 거래를 방지하고 이에 대한 적절한 조치를 해야 합니다.  따라서 비정상적인 신용카드 거래 판별에 있어서 수십만 개의 거래 데이터를 분류하고 분석하는 일이   Feature 설명- Row (행) : 시간대에 따른 1개의 거래 내역- Column (열) : Time, Amount, Class, V1 ~ 28    **Independent Variable (X 변수)**    - Time: 첫 번째 신용카드 거래와 해당 행에 해당하는 신용카드 거래 사이에 존재하는 경과 시간     - V1 ~ V28: 주성분 분석을 통해 가려진 1회 거래 시 발생하는 정보    - Amount: 거래 금액      **Class Variable (Y 변수)**     - Class: 0은 정상 거래, 1은 신용카드 사기<jupyter_code>from sklearn.model_selection import train_test_split
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline
card_df = pd.read_csv('../../data/creditcard.csv')<jupyter_output><empty_output><jupyter_text>머신러닝 모델 만들어보기   EDA(데이터분석) --> 2.preprocessing(전처리) --> 3.모델 학습 ---> 4.모델 평가  EDA<jupyter_code>card_df.info()
# 인코딩( 문자열 --> 숫자) 을 할 필요는 없다 
# 결측치 확인 
import missingno as msno 
msno.matrix(card_df)
# 결측치도 없다. 

# 만일 결측치가 존재 ---> fillna(?), interpolate 방법을 사용
# 데이터 프레임에서 무작위로 하나 추출 
card_df.sample()
# 데이터의 범위 
# describe() 사용하면 기초통계랑을 볼수 있음
card_df.describe()
card_df.head()
# 데이터 프레임에서 뒤에 몇개 
card_df.tail()
X = card_df.drop(['Time', 'Class'],axis=1)
y = card_df.Class
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y)

# 분류 모델을 사용한다. 
from sklearn.linear_model import LogisticRegression
model = LogisticRegression().fit(X_train, y_train) 
y_pred = model.predict(X_test) # 예측 

from sklearn.metrics import accuracy_score
print('정확도: {:.2f}%'.format(accuracy_score(y_test, y_pred)*100))
# 다중공선성: 독립변수들 간에 강한 상관관계가 존재하여 정확도 떨어짐
# 독립변수들 간에 상관관계를 확인하자 
import seaborn as sns # 패키지
card_df.columns
# 독립변수만 저장 
원하는컬럼 = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',
       'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20',
       'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount']
# 상관관계 확인 
sns.heatmap(card_df[원하는컬럼].corr())
# v2, V5 색이 어둡다 --> 지워 볼까? 
# 기울어진 정도(skew값)를 확인 
from scipy.stats import skew
skew(card_df['Amount'])
# skew 값이 0이  이상적 
# skew 값이 + 이면 왼쪽으로 치우쳐진 그림 
# skew 값이 - 이면 오른쪽으로 치우쳐진 그림 
# 그림으로 치우쳐 있는 정도 를 확인 
sns.distplot(card_df['Amount'])
# 치우침 복구 --> 
# 왼쪽으로 치우쳤으면, 로그 변환 
# 오른쪽으로 치우쳤으면, 제곱(**2), 덧셈(+10), 곱셈(*2)
# 로그변환 
import numpy as np 
tmp = np.log(card_df['Amount'].values+0.4)
# skew 왜도 
print(skew(tmp))
sns.distplot(tmp)
card_df['log_Amount'] = tmp  # 새로운 컬럼 만들기 
card_df = card_df.drop('Amount',axis=1)
# 독립변수만 저장 
원하는컬럼 = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',
       'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20',
       'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'log_Amount']
sns.heatmap(card_df[원하는컬럼].corr())
# 독립변수 v2, v5 제외 
원하는컬럼 = ['V1', 'V3', 'V4', 'V6', 'V7', 'V8', 'V9', 'V10',
       'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20',
       'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'log_Amount']
X = card_df[원하는컬럼]
y = card_df.Class
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y)

# 분류 모델을 사용한다. 
from sklearn.linear_model import LogisticRegression
model = LogisticRegression().fit(X_train, y_train) 
y_pred = model.predict(X_test) # 예측 

from sklearn.metrics import accuracy_score
print('정확도: {:.2f}%'.format(accuracy_score(y_test, y_pred)*100))<jupyter_output>정확도: 99.92%
{'fraction_non_alphanumeric': 0.17472434266327397, 'fraction_numerical': 0.05004240882103478, 'mean_word_length': 4.127536231884058, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 15, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '625207', 'license': 'MIT', 'n_tokens_mistral': 2149, 'n_tokens_neox': 2438, 'n_words': 416, 'path': 'code/Day04/Day04_07_Credit Card Fraud Detection.ipynb', 'repo_name': 'hoesung/blockchain-devML-course', 'size': '3537'}