Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

딥러닝으로 구현한 이상거래탐지시스템

3,122 views

Published on

비지도 학습 오토인코더 모델을 이용해 이상 거래를 학습하고 탐지했습니다. 50000건의 데이터 중 500건의 이상 거래 데이터를 모두 탐색했습니다.

Published in: Data & Analytics
  • Login to see the comments

딥러닝으로 구현한 이상거래탐지시스템

  1. 1. 신용카드 이상거래 검출 -autoencoder- DaeHyun,YoungJun
  2. 2. index • FDS (Fraud Detection System) • data EDA & visualization • data cleaning • data modeling - autoencoder • result
  3. 3. 공인인증서가 없는 세상
  4. 4. FDS(Fraud Detection System) “ 이상 금융 거래 방지 시스템“ 간편결제와 같은 금융환경의 변화에 맞춰 핀 테크의 중심으로
  5. 5. 요약하자면 Rule Based System (낮은 정확도) -> DeepLearning 을 적용(높은 정확도) 이상 거래의 사전탐지율을 높이자!
  6. 6. 간단한 신경망으로 이상거래를 찾아낼 수 있을까?
  7. 7. Input Output
  8. 8. autoencoder 이미지 잡음 제거, 차원축소, 이상치 감지에 효과적인 비지도학습 모델
  9. 9. encoder 를 통해 입력 데이터의 특징을 추출
  10. 10. decoder 를 통해 추출된 특징을 입력 데이터와 유사하게 복원
  11. 11. 기본적인 학습 방법 (출력값 – 입력값) 이 0 에 가까워지도록
  12. 12. Input Output minimize(output – input)
  13. 13. 학습을 진행할수록 출력과 입력이 같아진다 (출력-입력 = 0 에 가까워진다) 학습 후 이상거래 데이터를 넣었을 때 학습한 데이터와 다르므로 출력이 커진다 임의의 임계값을 설정해 (출력-입력) > (임계값) 이 되면 이상거래라고 판단한다
  14. 14. 어쨌든 Tensor로 구현해보자 step by step
  15. 15. data EDA
  16. 16. Use Kaggle Data https://www.kaggle.com/mlg-ulb/creditcardfraud
  17. 17. • creditcard.csv • 2013년 9월 중 이틀간 유럽 카드사의 실제 데이터 • 총 284,807 건의 트랜잭션 로그( 492건의 비정상 데이터) • 데이터 분포의 불균형 (비정상 데이터 0.172%) • 전체 31개 컬럼 • time, v1~v28(features), class(abnormal =1 else 0), amount 로 구성 • v1~v28 컬럼은 보안의 문제로 컬럼명이 모두 삭제됨
  18. 18. pandas 패키지를 이용해 csv 파일을 읽는다
  19. 19. null 값이 있는지 확인
  20. 20. 데이터의 불균형 확인
  21. 21. 시간에 따른 트랜잭션 양 금액별 트랜잭션 양
  22. 22. 시간대별 트랜잭션 금액 사이에서도 별다른 특징점을 찾을 수 없다
  23. 23. 각 컬럼별 값 분포 히스토그램 (blue : normal – orange: fraud) 값차이가 있는 feature 와 없는 feature 가 보인다
  24. 24. data EDA data cleaning
  25. 25. 데이터 정규화 데이터를 일정한 값 사이로 분포시켜 네트워크의 학습을 돕는다
  26. 26. Feature scaling X’ = X- min(X) / max(X) – min(X) 모든 값을 0과1 사이의 값으로
  27. 27. df_norm = (df - df.min() ) / (df.max() - df.min() )
  28. 28. 데이터 분할 train 데이터로는 학습을 test 데이터로 나눠 모델의 범용성을 평가
  29. 29. 원본데이터 정규화 정상거래 데이터 이상거래 데이터 학습 데이터 (80%) 테스트 데이터 (20%) 테스트 데이터 셔플한 학습 데이터 셔플한 테스트 데이터
  30. 30. Matrix 형태로 변형
  31. 31. data EDA data cleaning data modeling
  32. 32. high level API 로 쉽게 모델링하자!
  33. 33. encoder 압축
  34. 34. . . . 28 . . . 20 . . . 14 . . 10 X (V1~V28) encoder
  35. 35. X = tf.placeholder(tf.float32, [None,28]) 입력 데이터 V1~V28 특징 컬럼
  36. 36. dense1=tf.layers.dense(inputs=X, units=20, activation=tf.nn.sigmoid) dense2=tf.layers.dense(inputs=dense1, units=14, activation=tf.nn.sigmoid) encoder = tf.layers.dense(inputs=dense2, units=10, activation=tf.nn.sigmoid)
  37. 37. decoder 복원
  38. 38. . . . 28 . . . 20 . . . 14 . . 10 encoder decoder (V1’~V28`)
  39. 39. dense4 = tf.layers.dense(inputs=encoder, units=14, activation=tf.nn.sigmoid) dense5 = tf.layers.dense(inputs=dense4, units=20, activation=tf.nn.sigmoid) decoder = tf.layers.dense(inputs=dense5, units=28, activation=tf.nn.sigmoid)
  40. 40. optimize
  41. 41. tf.subtract(decoder,X) cost = tf.reduce_sum(tf.square(tf.subtract(decoder,X))) optimizer = tf.train.AdamOptimizer().minimize(cost) 빼기 출력 입력
  42. 42. training
  43. 43. epoch = 5 batch size = 500 learning rate = 0.001(default) critical point(임계값) = 0.07
  44. 44. Data(cost) 임계값 임계값이 넘는 데이터를 이상거래로 판단한다
  45. 45. data EDA data cleaning data modeling result!
  46. 46. test
  47. 47. 492 개의 이상거래 데이터 중 447 개의 이상거래 검출(임계값 0.07)
  48. 48. 다양한 임계값으로 테스트
  49. 49. 임계값이 커질수록 검출을 못한다
  50. 50. 개선점 • 비지도 학습에서의 평가지표, 시각화 • 불균형적 데이터의 처리 방법 • 파라미터 튜닝, 반복적 테스트 • 적절한 임계점을 찾을 수 있는 알고리즘 연구
  51. 51. Done!
  52. 52. 아쉬워 이상거래로 검출된 데이터를 db 에 저장해보기
  53. 53. import SQLITE3 SQLite는 별도의 DB 서버가 필요없이 DB 파일에 기초하여 데이타베이스 처리를 구현한 Embedded SQL DB 엔진
  54. 54. 이상거래라 판단되는 데이터를 하나씩 리스트에 담아준다 리스트를 DataFrame화 해준다 DataFrame을 만든 db 파일에 한번에 넣어준다 SQLITE3 를 사용해 db 파일을 만든다 maybefraud = pd.DataFrame(a_list) con = sqlite3.connect("company.db") maybefraud.to_sql('maybefraud’, con)
  55. 55. DB browser 로 확인
  56. 56. 이상 거래로 의심되는 V1~V28 특징값이 잘 들어갔다
  57. 57. 코드는 이곳에서 https://github.com/itwill009/deeplearning 자신감을 얻고 가세요
  58. 58. 감사합니다!

×