미래의 시계열 데이터 예측 방법

조회수 801회

모델을 훈련 시킨 이후 시계열 데이터의 미래를 예측하고자 합니다.

모델 훈련 이후 어떻게 predict를 활용하여 미래의 예측값을 구하는지 궁금합니다.

다음과 같은 방법을 사용했으나

a = y_val[-look_back:] 
for i in range(N-step prediction): #predict a new value n times.
    tmp = model.predict(a.reshape(-1, look_back, num_feature)) #predicted value     
    a = a[1:] #remove first     
    a = np.append(a, tmp) #insert predicted value

결과는 매번 코드를 실행할때 마다 y=ax 혹은 y=-ax의 형태로 plot이 됩니다.

결과는 다음과 같습니다. 이미지

미래의 예측값을 구하는 방법이 제대로 된 것인지 궁금합니다.

전체 코드는 다음과 같습니다.

def create_dataset(signal_data, look_back=1):
    dataX, dataY = [], []
    for i in range(len(signal_data) - look_back):
        dataX.append(signal_data[i:(i + look_back), :])
        dataY.append(signal_data[i + look_back, -1])
    return np.array(dataX), np.array(dataY)

look_back = 20

df = pd.read_csv('kospi.csv')

signal_data = df[["close"]].values.astype('float32')


train_size = int(len(signal_data) * 0.80)
test_size = len(signal_data) - train_size - int(len(signal_data) * 0.05)
val_size = len(signal_data) - train_size - test_size
train = signal_data[0:train_size]
val = signal_data[train_size:train_size + val_size]
test = signal_data[train_size + val_size:len(signal_data)]


x_train, y_train = create_dataset(train, look_back)
x_test, y_test = create_dataset(test, look_back)
x_val, y_val = create_dataset(val, look_back)


model = Sequential([
    layers.LSTM(20, input_shape=(None, 1)),
    layers.Dense(1)
])
model.compile(optimizer='adam', loss='mae')

history = model.fit(x_train, y_train, epochs=50, batch_size=64, verbose=0, validation_data=(x_val, y_val))

a = y_val[look_back:] 
for i in range(N):
    tmp = model.predict(a.reshape(-1, look_back, num_feature)) #predicted value
    a = a[1:] #remove first
    a = np.append(a, tmp) #insert predicted value

Python 3.6

Tensorflow 2.1.0

  • 오해를 하는 것 같은데 예측이라 해서 로또 번호 맞추듯이 예측하는 것이 아닙니다. 근사하는 함수를 예측하는 겁니다. 즉 제대로 된 것 입니다. 우선 기본 통계를 학습하고 선형회귀를 학습해볼 것을 권합니다. 정영훈 2020.2.7 21:49

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)