Data Analysis 28

[Machine Learning] train_test_split, Scaler, 데이터 불균형처리

1. train_test_split() 함수의 stratify 옵션데이터의 비율을 유지하면서 훈련/테스트 세트를 나누도록 해주는 기능 1) stratify 없는 경우 x_train, x_test, y_train, y_test = train_test_split( iris.drop('class', axis =1), iris['class'], test_size = 0.2, random_state=1000) 소수 클래스가 훈련 또는 테스트 셋에 거의 안 들어갈 수도 있음 2) stratify 있는 경우x_train, x_test, y_train, y_test = train_test_split( iris.drop('class',axis=1), iris['class'], te..

[Machine Learning] 이상치(Outliers)

1. 이상치 탐색1) IQR이란?IQR은 데이터에서 중간 50%의 범위를 나타내는 값으로, Q3 (3사분위수)에서 Q1 (1사분위수)를 뺀 값.IQR = Q3 - Q1Q1 (1사분위수): 전체 데이터를 작은 순서대로 정렬했을 때, 하위 25% 지점의 값Q3 (3사분위수): 전체 데이터 중 상위 75% 지점의 값2) 이상치 판별 기준IQR을 이용해서 이상치 경계 잡기:하한 (Lower bound) = Q1 - 1.5 × IQR상한 (Upper bound) = Q3 + 1.5 × IQR이 범위 밖의 값들을 이상치로 본다. 1.5라는 계수는 보통 사용되는 기준이지만, 더 민감하거나 덜 민감하게 하고 싶으면 값을 조절할 수 있음 (예: 2.0, 3.0 등). 3) 이상치 판별 코드1. 박스플랏 사용해서 이상치 ..

[Machine Learning] 비지도학습(군집화 중 K-Means)

1. K-Means 이론 설명Random Initialization Trap 문제로 K-Means++ 방법을 씀최적의 K를 찾기 위해 Elbow Method를 사용함     2. K-Means 코드 흐름1) 비지도 학습은 정답이 없는 데이터이기 때문에 데이터셋에 있는 열들을 모두 독립변수 X로 가져온다X = dataset.iloc[:, :].values# X = dataset.values# X = dataset.to_numpy() # 공식 홈페이지 권장 2) 전체 데이터 분포를 확인한다.plt.scatter(X[:, 0], X[:, 1]) # x축 : hour, y축 : scoreplt.title('Score by hours')plt.xlabel('hours')plt.ylabel('score')plt.s..

[Machine Learning] 지도학습(회귀/분류)

출처: 나도코딩 '머신러닝' 1. Linear Regression 1) 기본X = dataset.iloc[:, :-1].values # 처음부터 마지막 컬럼 직전까지의 데이터 (독립 변수 - 원인)y = dataset.iloc[:, -1].values # 마지막 컬럼 데이터 (종속 변수 - 결과)from sklearn.linear_model import LinearRegressionreg = LinearRegression() # 객체 생성reg.fit(X, y) # 학습 (모델 생성)y_pred = reg.predict(X) # X 에 대한 예측 값# 값들 확인하는 방법reg.predict([[9]]) #9시간 공부했을 때 예상 점수 reg.coef_ # 기울기 (m)reg.intercept_ # y 절..

[Invest Class] 5. Relative Momentum 전략 함수 생성

1. Relative Momentum 전략 매달 모든 종목의 수익률을 계산하여 수익률 기준 상위 n개 종목을 고르고, 그 상위권에 들어온 종목은 신호 발생이라고 보고 매수 대상이 된다. 다음 달에도 그 종목이 상위권에 계속 포함되면 매수를 유지하고 상위권에서 탈락하면 매도한다. *os.listdir('./DATA')files = glob('./DATA/*.csv')첫쨰줄 : 폴더 안에 있는 모든 파일과 폴더 이름을 리스트 형태로 출력 ex) ['AAPL.csv', 'TSLA.csv', 'MSFT.csv']둘째줄 : glob()은특정 패턴에 맞는 파일 이름들을 리스트로 반환하는 함수 ex) ['./DATA/AAPL.csv', './DATA/TSLA.csv', './DATA/MSFT.csv']for file..

[Invest Class] 4. Absolute Momentum 전략 함수 생성

1. Absolute Momentum 전략자산의 절대적인 수익률을 기준으로 투자 여부를 결정하는 방식으로 특정 자산의 과거 수익률이 양이면 매수하고, 음이면 매수하지 않는다.여기에서는 '전월의 수정종가 / 전년도의 수정종가) - 1'를 인덱스로 설정하고 0보다 클때 매수하는 전략 *try-except 구조test_df = pd.DataFrame()for year in range(1980, 2026): # 년도를 반복 for month in range(1, 13): # 월을 반복 try: idx = f"{year}-{month}" df2 = df.loc[idx].tail(1) test_df = pd.concat( [test_df,..

[Invest Class] 3. Halloween 투자 전략 함수 생성

1. Halloween 투자 전략11월 첫날에 시작 각격으로 구매하여 4월 마지막날에 종가로 판매하는 투자 전략(투자 전략이랄 것도 없는 ㅎㅎ..!) 재미용으로 봐주세요! *시계열 데이터에서 시간을 합하는 방법from dateutil.relativedelta import relativedeltastart = datetime(year = 2000, month=11, day=1)start + relativedelta(months=5) * datime객체를 다시 문자열로 바꿔서 loc을 걸어주는 이유halloween_df = pd.DataFrame()for i in range(2000, 2011): start = datetime(year = i, month =11, day =1) end = star..

[Invest Class] 2. Bollinger 함수 생성

1. bollinger 밴드 투자 전략하단 밴드보다 이하로 가격이 떨어지면 매수, 상단 밴드보다 이상으로 가격이 오르면 매도하는 투자 전략 *이동 평균선 생성하기1) 반복문 이용하기df2['center'] = np.nanfor i in range(19, len(df2)): mean_data = df2.iloc[i-19:i+1,0].mean() df2.iloc[i, 1] = mean_datadf2주의할 것!! 오류 났던 이유: df2.iloc[i-19:i,0] 이라고 적었었음 slicing[start:end]는 end가 exclusive 함!!즉 df.iloc[row , column] 이고 row랑 column을 슬라이싱으로 표현할 때 a: b 라면 a부터 b-1까지 포함  2) rolling(..

[Invest Class] 1. buyandhold 함수 생성

1. buyandhold : 매수 후 일정 기간 동안 유지한 뒤 매도하여 수익률 구하기 * Adj Close를 사용하는 이유:adjusted close는 기업의 주식 분할, 배당금 지급 등의 이벤트를 반영해서 조정한 가격이다. 과거 주식의 수익률을 계산하거나 시계열 데이터 분석 및 포트폴리오 수익률 계산 시 사용되어지고 배당과 주식분할 등의 이벤트를 반영한 '실제 투자자가 체감한 수익률 기준'의 가격이다. *  일별 수익률 구할때 주의점:오늘의 수정종가/ 전날의 수정종가 식으로 구할때 첫번째 데이터는 이전날의 데이터가 없기때문에 결측치 발생->AAPL['daily_rtn'] = \ (AAPL['Adj Close'] / AAPL['Adj Close'].shift()).fillna(1) * 수익률/ 누..

[ISLP] Logistic Regression Lap

목적 : 주식 시장 데이터를 사용해서 다음날 주가가 오를지 내릴지 예측하는 로지스틱 회귀 모델을 학습 데이터는 다음과 같이 생겼다. 받은 데이터 셋에서는 Direction이 이미 있지만, 로지스틱 회귀 모델을 사용하여 예측한 Direction의 값의 정확성을 예측하기 위해 사용될 예정이다. First Step:allvars = Smarket.columns.drop(['Today', 'Direction', 'Year'])design =MS(allvars)X = design.fit_transform(Smarket)y = Smarket.Direction == 'Up'glm = sm.GLM(y,X, family=sm.families.Binomial())results = glm.fit()summarize(resu..