AML 자료 모음

AML 분석 모델

  • 자금세탁 의심거래 탐지 방안 - 소셜 네트워크 분석 기법을 중심으로 : link
  • AML model risk management and validation: Introduction to Best Pratices : link
  • Flushing out the money launderers with better customer risk-rating models : link

이론과 메뉴얼

  • How does money laundering work? Youtube : link
  • Korea: Anti-Money Laundering Laws and Regulations 2021 : link
  • [책] 쉽게 이해하는 블록체인 : 암호화폐 자금세탁 방지 : link
  • 차세대 AML - SAS 분석 자료 : link

AML solutions

  • SAS anti-money laundering : link
  • SAS support - learning course : link
  • FICO : FICO: Fraud Detection and Anti-Money Laundering with AWS Lambda and AWS Step Functions : link

AML learning

  • ACAMS - AML 교육의 명가 : link
  • Anti-Money Laundering & Counter-Terrorist Financing Course : link
  • AML eLearning Course : link

현업 데이터 사이언티스트들의 업무

  1. NetBoost (XgBoost+Network) for Suspicious Transaction Report
    • Designed and implemented XgBoost model with network-based features to improve Transaction Monitoring System
    • Utilized the relationships between neighbors in the graph to discover potential suspicious transactions and succeed to report unprecedented types of suspicious transactions to Korea Financial Intelligence Unit (KoFIU)
  2. Risk Assessment System (RA)
    • Developed real-time Risk Assessment System to define customer’s risk level and provide appropriate KYC procedure.
    • Leveraged tree-based M/L algorithm to select appropriate features for RA, and defined accuracy evaluation for different risk level
  3. Paper Company Detection Model
    • Implemented automated paper company detection process using web crawling(w/python), and reduced monitoring time by 90%
    • Designed a quantified detection model using crawling source and internal transaction data. Utilized point biserial correlation to define feature’s weight

국제 기준 및 정부 기관

  • 금융정보분석원 : link
  • 2021.02에 발표된 금융정보분석원(FIU)의 자금세탁방지 역량 강화 방안 및 2021년 중점 추진과제 : link
  • 자금세탁방지 국제기구(FATF) : link

저의 알고리즘 레포지터리를 소개합니다.


github screenshot
github screenshot

'알고리즘' 카테고리의 다른 글

[프로그래머스 Lv 3] 상담원 인원  (1) 2023.07.29
[이코테] 구현 - 게임 개발  (0) 2021.06.13
[stack] 2504번 괄호의 합  (0) 2019.06.03

채용 공고 분석: 네이버 파이낸셜 AML 데이터 분석 및 모델링 인턴쉽

난 AML을 새로 배우기 막 시작했다. 그 첫 걸음을 채용 공고 분석으로 시작해보려 한다.

채용 직무

  • AML 데이터 분석 및 모델링

    • 자금세탁 의심거래 탐지를 위한 Rule 기획 및 예측 모델링 개발/운영

    • 고객 위험평가 모델 운영 및 고객 행동 분석

    • 프로세스 자동화, 분석 자동화 기획/운영

    • 금융당국 대상 의심거래 보고 운영

우대사항

  • 대용량 데이터 분석 Skill/Tool 사용 가능자 (Python, R, SAS 등)

  • 데이터 모델링, 머신 러닝 등에 대한 통계적 지식 및 수학적인 이해가 있는 분

  • AML 또는 RegTech 분야에 관심이 있는 분

실제로 하는 일

  • AML 데이터 분석

  • 고객 계좌와 이체 데이터 정제

  • 고객 위험평가 모델 구축

  • 자금세탁 의심거래 탐지를 위한 머신러닝 기법 실험

  • 자금세탁 의심거래 Rule 기획, 예측 모델 설계

  • 데이터 분석 전체 프로세스 코드 자동화

  • STR 보고 시스템, 보고서 작성

사용 언어 및 툴

  • 언어 : Python, R, SAS

왜 AML일까

  • 안전성 있는 사회를 만들고, 우리 사회가 핀테크를 받아들이는 과정에서 먼저 완성되야 할 기술
  • 사회 제도권에서 영역을 넓히기 위해서 소비자와의 신뢰 쌓기, 이것이 Next thing
  • 나 스스로도 안전성, 신뢰가 중요, 나의 공백기에도 운동이나 뉴스 확인 같이 일상에 반복되는 일들을 하며 안전성을 유지하는 것을 가장 중요시
  • 기준을 잡혀있고 정형화된 Reg programming에 강점
  • 새로운 신용평가 시스템으로 다양한 팩터가 적용된 AML -> AML이 발전해야될 길이라 생각

왜 데이터 분석 및 모델링일까

  • 데이터에서 패턴을 읽고 머신러닝 기법으로 정답에 맞추어 다가가도록 만드는 철학이 내 인생철학과 동일

  • 빅데이터에 있는 진실을 프로그래밍 기술로 캐치하여 현실화하는 것이 멋지다고 느껴짐

  • 데이터를 보고 과정을 자동화하는 일련의 과정이 평소에도 효율화를 꿈꾸는 나에게 매력적인 테스크

  • 내가 분석력, 약간의 기획력, 프로그래밍, 수학을 기반으로 하는 구조 설계를 갖추었다고 믿는다.

전형 일정

  • 6월 18일 지원자 모집 마감

  • 서류전형 / 역량 면접

  • 7월 12일 ~ 8월 27일 인턴쉽

  • 정규직 면접

준비 사항

  • 고객 위험평가 모델 / 고객 행동 분석

  • 분석 자동화 MLOpS?

  • 예측 모델링

  • Anomaly Detection

  • Python, SQL

  • STR 매커니즘 알기

  • AML/FDS 매커니즘 알기

  • Regtech 알기

  • 데이터 모델링과 머신러닝, 통계적 지식 및 수학적인 이해

  • ncloud?

실제로 해보려 찾아볼 일

  • AML 데이터 분석

  • 고객 계좌와 이체 데이터 정제

  • 고객 위험평가 모델 구축

  • 자금세탁 의심거래 탐지를 위한 머신러닝 기법 실험

  • 자금세탁 의심거래 Rule 기획, 예측 모델 설계

  • 데이터 분석 전체 프로세스 코드 자동화

  • STR 보고 시스템, 보고서 작성

참고

'개발 관심사 > Anti-Money Laundering' 카테고리의 다른 글

AML 자료 모음집  (2) 2021.06.17
네이버 파이낸셜 알아보기  (0) 2021.06.15

발전을 거듭하는 핀테크 기업: 네이버 파이낸셜

커머스와 트래픽을 토대로 사업을 확장하고 있는 핀테크 기업, 네이버 파이낸셜에 대해 알아보자

왜 네이버 파이낸셜일까

핀테크

  • 개발자는 프로그래밍으로 문제를 해결하는 사람
  • 금융, 돈은 삶에서 떼어낼 수 없고, 내 인생의 도메인으로 삼고 싶다
  • 신뢰과 금융의 편의성이 높다. 인간의 시간을 아껴준다. IT는 금융의 메인 패러다임이 될 수 밖에 없다.
  • 기술의 필요 : 네이버 쇼핑, 커머스 분야에서 놀라운 성장, 수많은 결제 데이터, 네이버 파이낸셜이 여러가지 실험을 할 수 있는 땔감

Zero Pay

  • 소상공인의 결제 수수료 부담을 줄이기 위해 민관이 합작해 만든 모바일 간편결제 서비스
  • 네이버, 정부, 서울시, 지자체가 함께 하는 QR 결제 서비스
  • 네이버 앱으로 이용 가능
  • 제로페이로 인해 네이버의 페이 시스템이 오프라인과의 교점을 만드는 지점 효과 기대

기업 장점

  • 네이버 플랫폼을 기반으로 한 금융 서비스 연계성
  • 결제 데이터량, 네이버 쇼핑
  • 스마트 스토어의 사업자 고객들과 소비자 고객들
  • 사용자의 규모가 받쳐주는 회사에서만 할 수 있는 새로운 시도
  • 검색 회사, 탄탄한 데이터 기술력
    • 유연 근무제
    • 유연한 호칭 체계
    • 절차 중심 X 업무 중심 문화 O
    • 성과 중심
    • 평등한 기회
    • 실력 있는 동료들
  • 기업 문화

기업 약점 및 단점

  • 오프라인 결제 경쟁력, 앱 내 Zero pay로 보강
  • 원앱 전략을 선택하여 아직 그 효과를 실험 중

기업 강점

  • 네이버 파이낸셜 마이데이터
  • 네이버 페이 신용관리 서비스 (ACSS)
    • 신용 분석 리포트 제공, 4영역 거래기간, 신용형태, 부채, 상환이력 난 916점
  • 스마트스토어 사업자 대출 500억원 달성, 미래에셋캐피탈과 우리은행 함께 소외된 사람들 신용관리 서비스로 혜택
  • 카카오페이, 토스와 달리 네이버 파이낸셜 흑자 전환, 매출 7000억원
  • 오프라인 QR 결제 서비스, 빠른 정산 등 핀테크 서비스
  • NF보험서비스 보험 준비
  • 금융위로부터 후불결제 대상기업으로 선정되어 후불 결제 서비스
  • 주식이나 채권, 외화 형태로 자산을 관리하는 경우 늘어남 네이버 증권는 투자 정보 제공 정도의 역할

경쟁사는

  • 금융 결제량 KB
  • 카카오페이, NHN 페이코, Toss
  • 지역 상품권 -> 포용 전략
  • 쿠팡 페이 -> 네이버 쇼핑 보강 및 금융 서비스 확장으로

참고

  • 공식 사이트 : https://naverfincorp-career.com/
  • 캐치업, annual Report 사이트 내 네이버 파이낸셜 컨텐츠 참고
  • 네이버 파이낸셜 기사

'개발 관심사 > Anti-Money Laundering' 카테고리의 다른 글

AML 자료 모음집  (2) 2021.06.17
AML 데이터 분석 및 모델링 인턴쉽 모집  (3) 2021.06.16

이것이 코딩 테스트다 Ch04 실전 문제

4-3 게임 개발

 

문제 설명

게임 캐릭터가 맵 안에서 움직이는 시스템을 개발

  • 맵은 N x M 크기의 직사각형으로 각각 칸이 육지 또는 바다
  • 캐릭터는 상하좌우로 움직일 수 있고, 바다로 되어 있는 공간에는 갈 수 없다.

캐릭터 움직임 매뉴얼

  1. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향 (반시계 90도)부터 차례대로 갈 곳을 정한다.
  2. 캐릭터의 바로 왼쪽방향에 가보지 않은 칸이 존재한다면 왼쪽 방향으로 회전한다음 왼쪽으로 한 칸 전진
    왼쪽 방향 칸이 가보았던 칸이면 왼쪽 방향으로 회전만 수행
  3. 네 방향 모두 이미 가본 칸이거나 바다로 되어 있는 칸인 경우, 바라보는 방향을 유지한 채로 한 칸 뒤로 가고 1단계로 돌아간다.
    단, 이 때 뒤쪽 방향이 바다인 칸이라 뒤로 갈 수 없는 경우에는 움직임을 멈춘다.

Input

N -> int : row limit
M -> int : col limit
myloc -> list : 현재 위치 [x, y]
MAP -> 2d list : N x M MAP, 각 칸에 land(0)과 sea(1) 정보가 포함

Output

count -> int : visit한 valid한 타일의 개수

Limit

N >= 3
M <= 50
time : 1 second
memory : 128 MB

 

구현 코드

Analysis

시간복잡도 : O(NM)
공간복잡도 : O(NM)


def solve(N, M, myloc, mydi, MAP):  
    # 게임 개발  
    cnt = 1  
    land = 0  # sea = 1  
    direction = [[0, -1], [1, 0], [0, 1], [-1, 0]]  
    visited = [[False for x in range(M)] for y in range(N)]  
    get_left_di = lambda di: (di + 3) % 4  # turn left 90 degree  
    get_back_di = lambda di: (di + 2) % 4  # turn 180 degree  
    get_next_xy = lambda loc, di: [  
        loc[0] + direction[di][0],  
        loc[1] + direction[di][1],  
    ]  # get next loc through direction  
    check_loc_is_valid = (  
        lambda x, y: (0 <= x < M) and (0 <= y < N) and MAP[y][x] == land  
    )  # check loc in MAP and loc is land  

    visited[myloc[1]][myloc[0]] = True  
    while True:  
        next_x, next_y = get_next_xy(myloc, get_left_di(mydi))  # get loc to left direction  
        # 왼쪽 방향으로 전진한 칸이 valid하고 가보지 않은 칸이면 왼쪽으로 회전하고 한 칸을 전진  
        if check_loc_is_valid(next_x, next_y) and not visited[next_y][next_x]:  
            visited[next_y][next_x] = True  
            cnt += 1  # cnt += 1 when visit valid and not-visited loc  
            myloc = [next_x, next_y]  
            mydi = get_left_di(mydi)  

        # 그 외 경우 방향만 left 90 degree로  
        else:  
            mydi = get_left_di(mydi)  

        # 네 방향 중 가볼 수 있는 loc가 있으면 break  
        for di_idx in range(4):  
            next_x, next_y = get_next_xy(myloc, di_idx)  

            if check_loc_is_valid(next_x, next_y) and not visited[next_y][next_x]:  
                break  
        # 네 방향이 모두 가본 칸이거나 갈 수 없는 타일인 경우  
        else:  
            myloc = get_next_xy(myloc, get_back_di(mydi))  # 뒤로 한 칸, 방향은 유지  
            if not check_loc_is_valid(myloc[1], myloc[0]):  # 뒤로 간 칸이 갈 수 없는 타일이면  
                return cnt  
    return 0  

 

테스트 코드


class testSolve(unittest.TestCase):  
    def testcase(self):  
        N, M = 4, 4  
        myloc = [1, 1]  
        mydi = 0  
        MAP = [[1, 1, 1, 1], [1, 0, 0, 1], [1, 1, 0, 1], [1, 1, 1, 1]]  
        self.assertEqual(solve(N, M, myloc, mydi, MAP), 3)  


unittest.main()  

'알고리즘' 카테고리의 다른 글

[프로그래머스 Lv 3] 상담원 인원  (1) 2023.07.29
My github as algorithm hub  (0) 2021.06.16
[stack] 2504번 괄호의 합  (0) 2019.06.03

백준 2504번 괄호의 합 링크 : 

    https://www.acmicpc.net/problem/2504

 

2504번: 괄호의 값

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다.  만일 X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다.  X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다. 예를 들어 ‘(()[[]])’나 ‘(())[][]’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()(

www.acmicpc.net

2504번 문제 설명

괄호의 합은 두 가지 로직이 필요한 문제였다. 

 

    - 괄호가 잘 닫혀있는 지 확인

    - 괄호의 합을 계산

 

괄호가 잘 닫혀있는 지 확인 (불가능한 형태인지 확인)

    - Stack을 사용하여 연 괄호 '(', '['를 닫는 괄호 ')', ']'로 전부 잘 닫히는 지 확인한다.

        -> 연 괄호일 때 push, 닫는 괄호 일 때 stack top 괄호 모양 확인 후 pop

        -> 닫는 괄호와 연 괄호가 매칭되지 않으면 불가능한 형태이다. 중지하고 0을 출력한다.

        -> input string을 전부 탐색한 후에 stack이 비어있지 않으면 (잘 닫힌 것이 아니면) 불가능으로 판단

 

    - 여는 괄호의 갯수와 닫는 괄호의 갯수를 확인한다.

        -> 이 부분 때문에 조금 애먹었다.

        -> '(((((()))' 왼쪽과 같은 여는, 닫는 괄호의 수가 일치하지 않은 경우를 감지하기 위해,

             (), [] 형태마다 변수를 두어 괄호의 수를 체크한다. 여는 괄호일 때는 +1, 닫는 괄호일 땐 -1

 

괄호의 합을 계산

    - 괄호의 합을 계산하기 위해서는 분배 법칙을 적용된 식을 이해해야 한다. (a x (b + c) = a x b + a x c)

 

    - 괄호 안에 괄호가 정의되는 경우와 괄호가 끝나 괄호끼리 +하는 경우를 위해 몇 가지 규칙이 필요하다.

         -> 괄호가 열리는 순간 depth가 깊어진다고 가정한다.

              ( () 모양 괄호는 x2 depth, [] 모양 괄호는 x3 depth )

         -> 괄호가 열린 후 바로 닫힐 때는 +를 수행한다. ')' 모양일 때 바로 전 모양이 '(' 이면 +를 수행하는 식

         -> 괄호가 닫히는 순간 depth를 하나 벗어난다고 본다.

              ( (X), '()' 모양의 괄호를 벗어나면 /2, '[]' 모양의 괄호를 벗어나면 /3 )

 

    - 규칙에 따라 적용하면 문제의 예시 앞부분은 다음과 같이 풀이 될 수 있다.

         -> 예시 : "(()[[]])" , 초기 값 depth = 1, 초기 값 sum = 0

         -> 0번째 ( : depth x 2                      || depth = 2, sum = 0, 전체에 x2를 한 상태와 같음

         -> 1번째 ( : depth x 2                      || depth = 4,  sum = 0

         -> 2번째 ) : sum += depth, depth / 2  || depth = 2,  sum = 4

         -> 3번째 [ : depth x 3                      || depth = 6,  sum = 4

         -> 4번째 [ : depth x 3                      || depth = 18, sum = 4

         -> 5번째 ] : sum += depth, depth / 3  || depth = 6,  sum = 22

         -> 6번째 ] : depth / 3                      || depth = 2,  sum = 22

         -> 7번째 ) : depth / 2                      || depth = 1,  sum = 22

         -> 최종 값 : 22

         -> 손으로 계산해본 "(()[[]])" 값과 같음! =>> 2 x (2 + (3x3)) = 4 + 18 = 22

 

 * 구현 코드

input_data = input()
# input_data = "(()[[]])([])"

class Stack(list):
    push = list.append    
    def is_empty(self):   
        if not self:
            return True
        else:
            return False

    def peek(self): 
        if self.is_empty():
            return ""
        else :
            return self[-1]

stack = Stack()

mul_depth = 1
total_sum = 0
impossible = 0
s = 0
l = 0
leng = len(input_data)

for idx in range(leng):
    brk = input_data[idx]
    if brk.__eq__("("):
        s += 1
        mul_depth = mul_depth * 2
        stack.push(brk)

    elif brk.__eq__("["):
        l += 1
        mul_depth = mul_depth * 3
        stack.push(brk)

    elif brk.__eq__(")"):
        s -= 1
        if not stack.peek().__eq__("("):
            impossible = 1
            break

        if input_data[idx-1].__eq__('('):
            total_sum += mul_depth
        
        mul_depth = mul_depth / 2
        stack.pop()

    elif brk.__eq__("]"):
        l -= 1
        if not stack.peek().__eq__("["):
            impossible = 1
            break

        if input_data[idx-1].__eq__('['):
            total_sum += mul_depth
        
        mul_depth = mul_depth / 3
        stack.pop()

if (stack.is_empty == 0) or impossible or l or s:
    print(0)
else :
    print(int(total_sum))

'알고리즘' 카테고리의 다른 글

[프로그래머스 Lv 3] 상담원 인원  (1) 2023.07.29
My github as algorithm hub  (0) 2021.06.16
[이코테] 구현 - 게임 개발  (0) 2021.06.13

+ Recent posts