금융/재무 산업에서의 AI혁신

·2021년 12월 13일
0

NIPA AI 교육

목록 보기
30/31

1. 업무자동화

기존의 반복 업무를 자동화하는 SW 기술인 RPA(Robotic Process Automation)에
인공지능을 접목하여 스스로 판단하여 업무 수행을 하는 인지형 RPA 기술이 활용됨

기존-> 설계자가 하나하나 상황 발생에 어떻게 대응할 것인지 입력.

인공지능 도입으로 설계되지 않은 상황에 대해서도 좀 더 유연한 대처 가능

2. 금융서비스

고객의 편의성을 높일 수 있는 인공지능 기반 인터페이스를 제공

  • 고객 대응 스케쥴링으로 대기 없는 서비스
  • 고객 데이터 분석
  • 계좌 서비스 수행
  • 자산관리 비서
  • 금융 상품 추천

3. 개인화된 자산 운용 서비스

4. 신용평가

  • 인공지능 기반의 기술을 바탕으로 고객 신용 등급을 세밀하게 평가
  • 기존 금융 정보뿐만 아니라 비금융정보까지 분석함으로써 금융 서비스 사각지대의 고객까지 서비스 범위 확대 (비재무적인 정보까지 분석)

5. 실습. 인공지능으로 주가 예측하기

이번 실습에서는 주식 데이터를 바탕으로 인공지능 모델을 사용하여 미래의 주식 가격을 예측하는 과정을 수행해 보겠습니다.

데이터 구조 확인
본격적으로 주식 가격을 예측해보기 전 먼저 주식 데이터의 기본적인 구조 및 정보를 확인해보도록 하겠습니다.

데이터에는 3월 2일부터 7월 30일까지 105개의 날짜별 주식 정보에 대한 값들이 저장되어 있습니다.

변수 의미
Date 날짜
High 고가
Low 저가
Open 시가
Close 종가
Volume 거래량
Adj Close 수정 종가

지시사항
아래 코드를 사용하여 출력된 데이터를 확인하고 학습을 수행해보세요.
ma.data_plot()
실행 버튼을 결과를 확인해보세요.
제출 버튼을 눌러 데이터 확인 및 학습을 올바르게 수행했는지 확인해보세요.

machine.py

from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from tensorflow.keras import models
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Dense, Activation
from elice_utils import EliceUtils
elice_utils = EliceUtils()

def data_plot():

    # --- 주식 데이터 로드, 전처리, 분할, 모델 학습하기(이전 실습에서 진행) --- #
    df = pd.read_csv('data/stock.csv') 

    # 데이터프레임 출력(데이터프레임은 (헹 X 열)로 이루어진 표 형태의 특수한 데이터 타입)
    print(df)


    # --- 주식 데이터 살펴보기 --- #

    print('\n주식 데이터의 형태를 출력')
    print(df.shape)

    print('\n주식 데이터의 정보를 출력')
    print(df.info)

    print('\n주식 데이터의 상단 5개 행을 출력')
    print(df.head())

    print('\n주식 데이터의 하단 5개 행을 출력')
    print(df.tail())

    print('\n주식 데이터의 모든 열을 출력')
    print(df.columns)

    print('\n주식 데이터의 요약 통계 자료 출력')
    print(df.describe())

def train():

    # --- 주식 데이터 로드, 전처리, 분할, 모델 학습하기(이전 실습에서 진행) --- #
    df = pd.read_csv('data/stock.csv') 

    # 주가의 중간값 계산하기
    high_prices = df['High'].values
    low_prices = df['Low'].values
    mid_prices = (high_prices + low_prices) / 2

    # 주가 데이터에 중간 값 요소 추가하기
    df['Mid'] = mid_prices

    # 종가의 5일 이동평균값을 계산하고 주가 데이터에 추가하기
    ma5 = df['Adj Close'].rolling(window=5).mean()
    df['MA5'] = ma5

    df = df.fillna(0) # 비어있는 값을 모두 0으로 바꾸기

    # Date 열를 제거합니다.
    df = df.drop('Date', axis = 1)

    # 데이터 스케일링(MinMaxScaler 적용)
    min_max_scaler = MinMaxScaler()
    fitted = min_max_scaler.fit(df)

    output = min_max_scaler.transform(df)
    output = pd.DataFrame(output, columns=df.columns, index=list(df.index.values))

    # 트레인셋/테스트셋 크기 설정
    train_size = int(len(output)* 0.6) # 트레인셋은 전체의 60%
    test_size = int(len(output)*0.3) + train_size # 테스트셋은 전체의 30%

    #train/test 학습 및 라벨 설정
    #종가를 예측하기 위해 종가를 label로 설정
    train_x = np.array(output[:train_size])
    train_y = np.array(output['Close'][:train_size])
    test_x =np.array(output[train_size:test_size])
    test_y = np.array(output['Close'][train_size:test_size])
    validation_x = np.array(output[test_size:])
    validation_y = np.array(output['Close'][test_size:])

    # Keras 모델을 생성합니다.
    model = Sequential()

    # Keras 딥러닝 모델 학습을 위한 파라미터(옵션값)을 설정합니다.
    learning_rate = 0.01
    training_cnt = 1000
    batch_size = 100 
    input_size = 8 

    # 생성된 딥러닝 모델에 학습용 데이터(train_x)를 넣습니다.
    model.add(Dense(input_size, activation='tanh', input_shape=(train_x.shape[1],))) 
    model.add(Dense(input_size * 3,  activation='tanh')) 
    model.add(Dense(1, activation='tanh'))

    # 데이터를 학습을 진행합니다.
    model.compile(optimizer='sgd', loss='mse', metrics=['mae', 'mape','acc'])
    model.summary()
    history = model.fit(train_x, train_y, epochs=training_cnt,   
                        batch_size=batch_size, verbose=1)
    val_mse, val_mae, val_mape, val_acc = model.evaluate(test_x, test_y, verbose=0)
    
    
def predict():

    # --- 학습 결과를 그래프로 확인해봅니다 --- #

    # 학습된 모델로부터 테스트 데이터를 예측합니다.
    pred = model.predict(test_x)

    fig = plt.figure(facecolor='white', figsize=(8, 5))
    ax = fig.add_subplot(111)
    ax.plot(test_y, label='True') # 실제 주가
    ax.plot(pred, label='Prediction') # 우리가 만든 딥러닝 모델이 예측한 주가
    ax.legend()

    # 현재까지 그려진 그래프를 시각화
    plt.savefig("plot.png")
    elice_utils.send_image("plot.png")

draw.py

# -*- coding: utf-8 -*-

import base64 as _base64
import fcntl as _fcntl
import mimetypes as _mimetypes
import os.path as _ospath
import struct as _struct

import numpy as np
import pandas as pd
import matplotlib as mpl
mpl.use("Agg")
import matplotlib.pyplot as plt
import sklearn.decomposition
import sklearn.preprocessing
import sklearn.cluster

from elice_utils import EliceUtils  # isort:skip

elice_utils = EliceUtils()

def display_digits(X, title):
    plt.clf()
    plt.figure(figsize=(4, 4))
    plt.imshow(X, cmap=plt.cm.gray_r, interpolation='nearest')
    plt.title(title)

    plt.savefig("image.svg", format="svg")
    elice_utils.send_image("image.svg")

6. 실습. 파생변수 생성

주가 예측을 수행할 때 데이터에 존재하는 기존 변수 이외에 새로운 변수들이 추가될 수록 예측 성능을 높일 수 있습니다.

이번 실습에서는 주식 데이터에 들어있는 기본 데이터들을 가공하여 이동평균, 거래량 이동평균, 이격도 등을 계산하여 데이터프레임에 추가해보도록 하겠습니다.

지시사항
아래 코드를 사용하여 이동평균값(MA),거래량 이동평균값(VMA) 이격도값(disp) 변수를 추가해보세요.
ma.data_preprocess()
실행 버튼을 눌러 결과를 확인해보세요.
제출 버튼을 눌러 새로운 파생 변수들이 올바르게 추가되었는지 확인해보세요.
Tips
종가: 해당 날짜의 마감 주가
이동평균: 해당 날짜 이전 N일 간의 평균치
이격도: 주가와 이동평균 간의 차이 비율

import machine as ma

def main():
    
    """
    지시사항 1번. 이동평균값(MA),거래량 이동평균값(VMA), 이격도값(disp) 변수를 추가해보세요.
    """
    ma.data_preprocess()

if __name__ == "__main__":
    main()

7. 실습. 주가 예측 체험

이번 실습에서는 앞선 실습에서 확인한 주식 데이터를 바탕으로 딥러닝 모델을 학습시키고 이를 활용하여 주가 예측을 수행해 보겠습니다.

출력된 그래프는 2020년 7월 1일부터 30일까지의 종가를 비교하는 그래프로 파란선은 실제값을 의미하며, 노란선은 예측값을 의미합니다.

지시사항
아래 코드를 사용하여 딥러닝 모델의 학습과 예측을 수행해보세요.
ma.train()
실행 버튼을 눌러 결과를 확인해보세요.
제출 버튼을 눌러 학습과 예측을 올바르게 수행했는지 확인해보세요.

import machine as ma

def main():
    
    """
    지시사항 1번. 딥러닝 모델의 학습과 예측을 수행해보세요.
    """
    ma.train()

if __name__ == "__main__":
    main()
profile
백엔드 개발자. 공동의 목표를 함께 이해한 상태에서 솔직하게 소통하며 일하는 게 가장 즐겁고 효율적이라고 믿는 사람.

0개의 댓글