앞으로 머신러닝을 활용하여
환율을 예측하는 모델을 만들어보려 한다.
python의 다양한 library들을 사용하여 머신러닝 모델을 구현하고자 한다.
머신러닝 모델을 만들기 위해서는 크게
1. 데이터 수집
2. 데이터 전처리
3. 데이터 분리(학습용, 테스트용)
4. 모델 학습
5. 모델 평가(데이터 분석 및 시각화)
과 같은 순서를 따르게 된다.
오늘은 이를 구현하기 위한 다양한 파이썬 라이브러리에 대해 알아보고자 한다.
사용 라이브러리
import yfinance as yf # Yahoo Finance에서 금융 데이터 다운로드
import pandas as pd # 데이터 조작 및 분석을 위한 라이브러리
from sklearn.linear_model import LinearRegression # 선형 회귀 모델
import matplotlib.pyplot as plt # 데이터 시각화 라이브러리
이번 기초 모델에서는
위와 같은 라이브러리들을 사용한다.
1. yfinance

먼저, Yahoo Finanace에서 금융데이터를 다운로드 하기 위해 yfinance를 import한다.
yfinance는 Yahoo Finance에서 제공하는 금융 데이터를
쉽고 빠르게 내려받을 수 있도록 도와주는 파이썬 라이브러리다.
yfinance의 장점으로는 오픈 소스이고, 무료이기 때문에
별도의 API 키 발급 없어도 바로 데이터를 가져올 수 있다.
그리고 주식, ETF, 암호화폐, 환율 등 다양한 금융 데이터를 제공한다.
또한 pandas와 호환이 가능하여
dataframe 형태로 시각화하는데 매우 용이하다.
하지만 단점도 존재한다.
비공식 API이기 때문에 사이트 구조가 바뀌면 오류 발생 가능성이 있고,
국내 주식 데이터 일부는 업데이트가 느릴 수 있다.
2. pandas

그리고, 데이터 조작 및 분석을 위해 pandas를 import한다.
pandas는 파이썬에서 데이터를 수집, 정리 분석할 때 사용하는 필수 라이브러리다.
Pandas는 데이터를 효율적으로 다루기 위해 두 가지 주요 데이터 구조를 사용한다.
Series (시리즈): 1차원 배열 형태의 데이터 구조다. (엑셀의 '열' 하나와 유사)
DataFrame (데이터프레임): 행(Row)과 열(Column)로 구성된 2차원 표 형태의 구조다.
Pandas의 가장 핵심적인 객체라고 볼 수 있다.
데이터 분석 과정에서 Pandas가 제공하는 강력한 기능들은 다음과 같다.
다양한 파일 읽기: CSV, Excel, SQL 데이터베이스, JSON, HTML 등
다양한 형식의 데이터를 클릭 몇 번 대신 코드 한 줄로 불러올 수 있다.
결측치(Missing Data) 처리: 데이터 중 비어있는 값(None, NaN)을 찾아서 지우거나
특정 값으로 채우는 작업이 매우 간단하다.
데이터 필터링 및 정렬: 특정 조건에 맞는 데이터만 뽑아내거나(예: 매출 1억 이상), 정렬하는 작업이 빠르다.
통계 및 그룹화: 평균, 표준편차 등 통계량을 즉시 계산하고,
특정 기준(예: 지역별, 월별)으로 데이터를 묶어 분석(Groupby)하기 좋다.
import pandas as pd
# 데이터 생성
data = {
'이름': ['A', 'B', 'C'],
'나이': [25, 30, 22],
'점수': [85, 92, 78]
}
# DataFrame으로 변환
df = pd.DataFrame(data)
# 주요 기능 예시
print(df.head()) # 상위 데이터 확인
print(df.describe()) # 수치형 데이터의 기초 통계량 확인
print(df[df['나이'] > 23]) # 나이가 23 초과인 데이터만 필터링
위의 코드는 pandas를 사용하여 데이터 프레임을 만드는 코드다.
Pandas는 단순히 명령어를 외우기보다
불러오기 -> 살펴보기 -> 가공하기 -> 저장하기의 흐름을 익히는 것이 중요하다.
3. scikit -learn(LinearRegression)

선형 회귀 모델 학습을 위해 scikit-learn(사이킷런)에서 LinearRegression(선형 회귀)을 import한다.
scikit-learn(sklearn)의 LinearRegression은
머신러닝의 가장 기본적이면서도 강력한 알고리즘 중 하나인
선형 회귀(Linear Regression)를 구현한 클래스다.
데이터들 사이의 관계를 가장 잘 설명하는 하나의 직선(또는 평면)을 찾아내어,
새로운 값이 들어왔을 때 결과를 예측하는 데 사용된다.
선형 회귀의 핵심 원리에 대해 알아보자.
선형 회귀는 입력 변수와 출력 변수 사이에 다음과 같은 선형 관계가 있다고 가정한다.
y = wx + b
w (Weight/Coefficient): 기울기 (가중치)
b (Bias/Intercept): 절편 (편향)
LinearRegression 모델은
실제 정답과 모델이 예측한 값 사이의 차이(오차)의 제곱을 최소화하는
최소제곱법(Ordinary Least Squares, OLS) 방식을 사용하여
최적의 w와 b를 찾아낸다.
선형 회귀의 특징은 다음과 같다.
단순성: 모델 구조가 직관적이라 해석하기 매우 쉽다.어떤 변수가 결과에 얼마나 영향을 주는지 알 수 있음)
속도: 계산 복잡도가 낮아 대용량 데이터에서도 매우 빠르게 학습한다.
기준점(Baseline): 복잡한 딥러닝 모델을 만들기 전, 성능을 비교하기 위한 기준 모델로 가장 많이 사용된다.
from sklearn.linear_model import LinearRegression
import numpy as np
# 1. 데이터 준비 (예: 공부 시간 대비 시험 점수)
X = np.array([[2], [4], [6], [8], [10]]) # 입력 데이터 (2차원 배열 형태여야 함)
y = np.array([40, 55, 70, 85, 95]) # 타겟 데이터
# 2. 모델 객체 생성
model = LinearRegression()
# 3. 모델 학습 (Training)
model.fit(X, y)
# 4. 예측 (Prediction)
new_data = [[7]]
prediction = model.predict(new_data)
print(f"7시간 공부했을 때 예상 점수: {prediction[0]}")
# 5. 모델 파라미터 확인
print(f"기울기(w): {model.coef_}")
print(f"절편(b): {model.intercept_}")
위 코드는 LinearRegression을 활용한 코드다.
scikit-learn의 모든 모델은 동일한 사용 패턴을 가진다.
데이터 준비 -> 모델 객체 생성 -> 모델 학습 -> 예측 -> 파라미터 확인(w와 b)
의 과정을 따른다.
주요 속성 및 메서드는 다음과 같다.
| 명칭 | 설명 |
| .fit(X, y) | 데이터를 입력하여 모델을 학습 |
| .predict(X) | 학습된 모델로 새로운 값을 예측 |
| .score(X, y) | 모델의 정확도($R^2$, 결정계수)를 반환 (1에 가까울수록 정확함) |
| .coef_ | 학습을 통해 찾아낸 기울기(가중치) 배열 |
| .intercept_ | 학습을 통해 찾아낸 Y절편 값 |
선형회귀의 주의사항은 다음과 같다.
선형성: 데이터가 직선 형태가 아닌 곡선 형태라면 성능이 떨어진다. (이 경우 다항 회귀 등을 고려해야 함)
(초기 모델에서는 선형 회귀 모델로 학습)
이상치(Outlier): 모델이 평균적인 직선을 찾으려다 보니, 너무 튀는 데이터 하나에 직선이 크게 휘둘릴 수 있다.
스케일링: 필수사항은 아니지만, 여러 변수를 사용할 때
데이터의 단위(단위: 원, 단위: 개 등)가 너무 다르면 스케일링을 해줘야 한다.
4. matplotlib - pyplot

데이터 시각화를 위해 matplotlib의 pyplot을 import한다.
matplotlib.pyplot은 파이썬에서 데이터를 시각화할 때 가장 널리 쓰이는 도구다.
복잡한 그래프를 마치 캔버스에 그림을 그리듯 단계별로 생성할 수 있게 해주는 인터페이스이다.
.
주요 특징으로는 다음과 같다.
상태 기반(State-based) 인터페이스: 현재 활성화된 '피겨(Figure)'와 '축(Axes)'을 추적하며,
명령어를 입력할 때마다 기존 그래프 위에 새로운 요소(선, 점, 제목 등)를 층층이 쌓아 올리는 방식이다.
간편성: MATLAB과 유사한 명령 구조를 가지고 있어,
MATLAB 사용자들이 아주 쉽게 적응할 수 있다.
커스터마이징: 선의 색상, 굵기, 마커 종류, 폰트, 축 범위 등 그래프의 거의 모든 요소를 세밀하게 조절할 수 있다.
가장 기본적인 선 그래프(Line Plot)를 그리는 순서는 다음과 같다.
import matplotlib.pyplot as plt
# 1. 데이터 준비
x = [1, 2, 3, 4, 5]
y = [2, 4, 8, 16, 32]
# 2. 그래프 생성 (선 그래프)
plt.plot(x, y, label='Growth', color='blue', marker='o')
# 3. 꾸미기 (제목, 축 이름, 범례)
plt.title("Exponential Growth")
plt.xlabel("Time")
plt.ylabel("Value")
plt.legend() # 범례 표시
# 4. 격자 추가 (선택)
plt.grid(True)
# 5. 화면에 출력
plt.show()
pyplot의 주요함수는 다음과 같다.
pyplot은 데이터의 특성에 따라 다양한 그래프 형태를 지원한다.
| 함수 | 그래프 종류 | 용도 |
| plt.plot() | 선 그래프 | 시간 흐름에 따른 데이터의 변화(주가 등)를 볼 때 |
| plt.scatter() | 산점도 | 두 변수 사이의 상관관계를 점으로 나타낼 때 |
| plt.bar() | 막대 그래프 | 그룹별 수치를 비교할 때 |
| plt.hist() | 히스토그램 | 데이터의 분포(빈도수)를 확인할 때 |
| plt.boxplot() | 박스 플롯 | 데이터의 중앙값과 사분위수, 이상치를 한눈에 볼 때 |
그래프를 더 깊게 다루려면 다음 두 개념을 이해해야 한다..
Figure (피겨): 그래프가 그려지는 전체 도화지
Axes (축): 도화지 안에 들어가는 개별 그래프 하나하나를 의미
하나의 Figure 안에 여러 개의 Axes를 넣어 '멀티 그래프'를 만들 수 있다..
# 한 화면에 여러 그래프 그리기 (2행 1열)
plt.subplot(2, 1, 1) # 첫 번째 그래프
plt.plot(x, y)
plt.subplot(2, 1, 2) # 두 번째 그래프
plt.bar(x, y)
plt.show()
앞서 배운 Pandas와 함께 쓸 수도 있다.
Pandas의 DataFrame 객체에 바로 .plot() 메서드를 사용하면
내부적으로 matplotlib.pyplot을 호출하여 그래프를 그려준다.
# df가 Pandas DataFrame일 때
df.plot(kind='line')
plt.show()
다음 글에서는 오늘 학습한 다양한 파이썬 라이브러리를 사용하여
실제 환율을 예측하는 초기 모델을 구현해볼 예정이다.
'AI' 카테고리의 다른 글
| [환율 예측 모델] 기초 모델 설계하기 (0) | 2026.01.08 |
|---|
