비트코인 가격 예측 모델

2024. 1. 12. 07:51AI/Machine learning

    목차
반응형

Regression 모델로 예측

data loading

import pandas as pd

dataset = pd.read_csv('bitcoin.csv')
dataset.head()
           Date    Open    High    Low Close   Adj Close   Volume
    0   2017-01-01  963.66  1003.08 958.70  998.33  998.33  147775008
    1   2017-01-02  998.62  1031.39 996.70  1021.75 1021.75 222184992
    2   2017-01-03  1021.60 1044.08 1021.60 1043.84 1043.84 185168000
    3   2017-01-04  1044.40 1159.42 1044.40 1154.73 1154.73 344945984
    4   2017-01-05  1156.73 1191.10 910.42  1013.38 1013.38 510199008

Data 전처리

가격의 추이를 그래프로 분석

    price = dataset['Open'].to_numpy()

    from matplotlib import pyplot as plt

    plt.figure()
    plt.plot(np.arange(len(price)), price)
    plt.show()

값의 크기를 정규화

    price = price.reshape(-1, 1)        # 뒤에 dim 추가

    from sklearn.preprocessing import StandardScaler

    scaler = StandardScaler()  # z-normalization (standard ..)
    scaler.fit(price)
    price = scaler.transform(price).reshape(-1,)  

앞의 20일 데이터와 다음날을 y 값으로 하여 데이터셋 구성

        window = 20
        X = []
        y = []
        for i in range(len(price) - window):
          X.append(price[i: i + window])
          y.append(price[i + window])

        X = np.array(X).reshape(-1, window, 1)  # 1d conv를 위해 마지막에 dim 추가
        y = np.array(y)

데이터셋 분리

        x_train = X[:800]
        x_test = X[800:]

        y_train = y[:800]
        y_test = y[800:]

모델 정의

    model = keras.Sequential(
        [
            # shape: None x 20 x 1 (feature num은 1: 가격)
            # kernel_size = 3 (3일간 가격을 보겠음)

          layers.Conv1D(filters=10, kernel_size=3, input_shape = (20, 1)),

            # None x 18 x 10 
            # num params: (3*1 + 1)*10

          layers.Activation(keras.activations.relu),
          layers.Flatten(),

            # shape: 180

          layers.Dense(1)       # 가격 자체를 예측 하는 거라 (분류가 아니라) 1

            # shape: None x 1
            # params: 180*1
        ]
    )

학습

    model.compile(
        loss = "mean_squared_error",    # regression 문제라 (값 예측) MSE를 사용
        optimizer = keras.optimizers.Adam(lr = 0.0001)
        )
    hist = model.fit(x_train, y_train, epochs=200, validation_split=0.1)
반응형

'AI > Machine learning' 카테고리의 다른 글

Surprise  (0) 2022.05.15
Latent factor model: matrix factorization  (0) 2022.05.15
데이터 마이닝 1  (0) 2022.05.14
CF model with visual information  (0) 2022.03.27
언어모델  (0) 2022.03.13