본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/스터디

6회 차 | 4/1 금

728x90

6회 차!

 

스터디 출석부 보다 보니, 교육이 얼마 남지 않을 걸 실감한다.

 

6월 28일에 끝나는 교육 기간 중 AI와 융복합 프로젝트에 들어가는 기간을 제외하면, 수업은 16일 남았다.

(머신러닝 교육 2일 + 딥러닝 교육 14일)

프로젝트 시작 전 남은 스터디 횟수도 6번..

기간이 짧고 배울 양이 많고 심도 있는 내용이다 보니 배울 때 제대로 체내화 해야 한다!! 🐱‍🐉

 

오늘은 지난주 금요일에 각자 선정한 머신러닝 프로젝트를 발표했다.

 

스터디 인원 대부분이 데이콘 예제로 프로젝트를 진행하고 실제로 완성한 코드 제출도 하였더라! 👍

 

결측치가 있고, feature 별로 형태가 다르거나,

우리가 배운 회귀만 쓰는 것이 아닌 분류 등 다양한 모델을 학습하는데 쓰는 동료들.

나는 작고 소중하고 깔끔한 데이터 썼는데 푸헷ㅎ 멋져~

 

리뷰할 동안 내가 발표할 것 마저 정리하느라 집중을 잘 못 해서 아쉽다..

 

추가로 알게 된 것은
정규화 시 타깃 데이터(종속변수)를 포함해 모든 데이터를 진행해야 함

데이터 전처리 시 타깃 데이터(종속변수)를 카테고리화 하면 안 됨

x = 0일 경우 y가 무한대가 되므로 이를 방지하기 위해 x + 1 → np.log1p

큰 수를 같은 비율의 작은 수로 바꿔 주어 정규성을 높이고 분석에서 정확한 값을 얻기 위해 Log로 변환함

np.expm1은 각 요소에 자연상수를 밑으로 하는 지수함수를 적용한 뒤 1을 뺀 것. Log화 한 것 원복

+ SMOTE, 오버/언더 샘플링, L1/L2 규제(Lasso, Ridge), RMSLE, r2-score, 평가지표(recall, precision, roc_auc, f1-score)

 

다음 주는 멀캠 주간 수업과 진도를 맞추어 인공신경망을 자습할 생각이었지만,

4/5 화요일까지 제출해야 하는 수행평가가 3개나 되는 관계로 화요일 스터디를 월요일로 당겨 리뷰하기로 했다!


캐글 예제 보스턴 집값 예측

 

< 피드백 >

p-value가 0.05보다 크고 coefficient(상관 계수)가 0에 가까운 feature들(INDUS, AGE)을 모델링 전에 지워주면 정확도가 높아질 것

 

< 느낀 점 >

  • feature(독립변수)가 더 많고 결치값이 있고, 데이터 타입이 여럿(형식이 통일되지 않은)인 데이터 핸들링과 다중선형회귀 구현을 필히 해보자

  • 여러 가지 데이터를 직접 수집해서 진행해보자

  • 다중공선성이 존재할 경우 유사한 feature들은 어떻게 처리하나? 둘 중 하나는 삭제 혹은 정규화?

  • sklearn의 linear model만 쓸 것이 아니라, 3/30 수요일에 멀캠에서 배운 파이썬 코드(+tensorflow)로 다중선형회귀의 결치값·이상치 처리 + 정규화까지 진행하여 구현해보자

  • 학습 모델을 다양하게 써보자
    규제 선형 모델 : 릿지, 라쏘
    분류 모델 : 결정 트리, 랜덤 포레스트(RF), 부스팅(GBM, Gradient Boosting Machine)

< 알게 된 것들 >

  • from sklearn.preprocessing import StandardScaler : 표준화
  • from sklearn.model_selection import train_test_split : Training set / Test set 나누기

  • 다중공선성 : 하나의 feature가 다른 feature와의 상관관계가 높으면(즉, 다중공선성이 존재. 정보의 중복), 회귀 분석 시 부정적인 영향을 미칠 수 있음. 모델링하기 전에 먼저 다중공선성의 존재 여부를 확인해야 함(VIF값). 일반적으로, VIF > 10인 feature들은 다중공선성이 존재하는 것으로 판단함.
    1. 일일이 변수간 상관관계를 파악하고 어떤 변수를 제거할지 고려하여 전진 선택법, 후진 제거법, 단계적 방법으로 해당 feature를 제거
    2. 다중공선성을 고려하지 않기 위해 분류 모델인 GBM(Gradient Boosting Machine) 사용
    3. 스케일링 기법(정규화 - 표준 정규분포, 중심화 - 편차, 로그화) 사용

  • from statsmodels.stats.outliers_influence import variance_inflation_factor : VIF 확인

  • zip(df[numerical_columns].columns, lr.coef_) : 각 feature들의 회귀계수 확인

  • OLS(Ordinary Least Squares, 보통최소제곱) : 회귀분석. Sklearn은 OLS(Ordinary Least Squares, 최소제곱법) 방식으로 RSS(예측값 - 실제값)를 최소화함

    import statsmodels.api as sm
    X_train2 = sm.add_constant(X_train)
    model2 = sm.OLS(y_train, X_train2).fit()
    model2.summary()

  • 자유도 : 표본을 구성하고 있는 개별 요소 중 주어진 조건하에서 통계적 제한을 받지 않고 자유롭게 변화될 수 있는 요소의 수

  • 결정계수(R-squared) : 전체 데이터 중 해당 회귀모델이 설명할 수 있는 데이터의 비율. 0과 1 사이의 값. 1에 가까울수록 회귀식의 설명력이 있음

  •  P-value : 연구자가 설정한 진위의 영가설에서 검정 통계치를 희소 또는 극한값으로 얻을 확률 값. 0.05보다 작으면 해당 변수는 유의함

  • RMSE(Root Mean Square Error)
    from sklearn.metrics import mean_squared_error
    from math import sqrt : 제곱근
    sqrt(mean_squared_error()

주식 종가 예측 못한 게 아쉬워서 데이터를 어디에서 수집할 수 있을지 조사했다.

 

  1. KRX(한국거래소) 정보데이터시스템의 전종목의 기본정보와 지정한 기간 동안의 일일 개별종목 시세 추이를 이용. Excel, CSV로 다운로드하거나
  2. 공공데이터포털의 금융위원회_주식시세정보 Open API 이용. XML, JSON로 끌고 오거나
  3. 데이콘에서처럼 FinanceDataReader 라이브러리 이용. 종목코드와 조회 기간을 부여해서 주식 데이터를 끌고 오는 것!

(데이콘에서는 종목 번호 데이터만 주어짐)

 

데이콘에서 입상한 코드들을 슬쩍 보니,

주식 데이터 말고도 외부 데이터(달러 환율, 기관/외인 거래량)를 추가해 고도화했더라. 크~

 

공공데이터포털의 Open API는.. 공식문서, 응답 예시가 없고 활용신청 건수가 달랑 200건.

Parameter를 어떻게 넣고 데이터를 어떤 식으로 끌어 오는지 확인하고 싶었으나

검색해도 샘플 코드나 예시가 없어, 인터페이스 프로젝트 때처럼 사용법을 강구해야 한다. 😅 일단 활용신청 ㄱ~

 

1. 통계 → 기본통계 → 주식 → 종목정보 → 전종목 기본정보 : 단축코드, 한글종목명, 한글종목약명, 상장일, 시장구분, 주식종류, 액면가, 상장주식수

2. 통계 → 기본통계 → 주식 → 종목시세 → 개별종목 시세 추이 : 

http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0301 

 

KRX 정보데이터시스템

증권·파생상품의 시장정보(Marketdata), 공매도정보, 투자분석정보(SMILE) 등 한국거래소의 정보데이터를 통합하여 제공 서비스

data.krx.co.kr

https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15094808#/layer-api-guide 

 

금융위원회_주식시세정보

한국거래소에서 제공하는 주식시세 정보 주식시세, 수익증권시세, 신주인수권증권시세, 신주인수권증서시세에 대한 오퍼레이션을 제공한다.

www.data.go.kr

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > 스터디' 카테고리의 다른 글

7회 차 | 4/4 월  (0) 2022.04.05
5회 차 | 3/29 화  (0) 2022.03.30
4회 차 | 3/25 금  (0) 2022.03.26
3회 차 | 3/22 화  (0) 2022.03.22
2회 차 | 3/18 금  (0) 2022.03.19