🔍

레모네이드 판매 예측을 통한 DeepLeaning예제 실습

기존에 있는 데이터를 가지고 예측하는 것을 진행해봅시다.

 
notion imagenotion image
이러한 형태로 예측을 보통 진행하게 됩니다. (아주 간단한 예제)
여러가지(ex 강화학습,지도학습,비지도학습 등)방법을 통해 예측할 수있만 너무 깊은 지식이 필요하여 이 강의에서는 간단한 숫자로 예측하는 "레모네이드 판매예측"실습을 통해 알아보겠습니다.

1. 데이터 준비

Pandas(표 형태를 가진 데이터(ex : 엑셀)을 다루기 위한 라이브러리) 예제

import pandas as pd #관례적으로 pd로 축약하여 사용 import numpy as np # 랜덤 값을 얻기 위해 넘파이 라이브러리 추가 series = pd.Series([1,20,5,2,10,11]) print(series) dataFrame = pd.DataFrame(np.random.randn(5,5)) print(dataFrame)
Pandas에서 사용되는 표 형태로써 시리즈(Series) , 데이터프레임(DataFrame)이 있습니다.
시리즈(Series)는 1차원 배열의 형태를 가진 표입니다. 왼쪽에 인덱스 또한 표현됩니다.
데이터프레임(DataFrame)은 2차원 배열의 형태를 가진 표입니다. 각 행과 열에 인덱스가 표현됩니다.
notion imagenotion image

레모네이드 데이터를 가져오기

레모네이드데이터 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/lemonade.csv' 레모네이드 = pd.read_csv(레모네이드데이터) print(레모네이드)
notion imagenotion image
위와 같이 데이터 프레임( 행렬) 형태로 나오는것을 알 수 있습니다.
레모네이드.head(2) # 데이터 최상단위치로 부터 입력받은 갯수만큼 내려가며 보여줍니다. 레모네이드.tail(3) # 데이터 최하단위치로 부터 입력받은 갯수만큼 올라가며 보여줍니다. 레모네이드[0:3] # 파이썬 리스트 슬라이싱 처럼 행 값으로 데이터를 다룰 수 있습니다. 레모네이드["판매량"] # 열 값의 이름으로 해당하는 데이터를 보여 줍니다.
notion imagenotion image

2. Tensorflow를 사용한 예측 모델 만들기

x = 레모네이드[['온도']] y = 레모네이드[['판매량']] print(x.shape, y.shape)
x(온도)로 부터 y(판매량)를 예측하기 위해 각 변수에 각 열의 데이터를 저장합니다.
x를 독립, y를 종속이라고 부르기도 합니다.
각 6행 1열의 데이터를 가지고 있습니다.각 6행 1열의 데이터를 가지고 있습니다.
각 6행 1열의 데이터를 가지고 있습니다.
import tensorflow as tf # 관례적으로 tf로 축약하여 사용합니다. X= tf.keras.layers.Input(shape=[1]) Y = tf.keras.layers.Dense(1)(X) model = tf.keras.models.Model(X, Y) model.compile(loss='mse')
X = tf.keras.layers.Input(shape=[1]) : shape=[1]은 x데이터는 1개 열을 가지기 때문에 이 층(Layer)에 들어갈 열의 갯수를 지정해줍니다.
Y = tf.keras.layers.Dense(1)(X) : Dense는 중간층 즉,입력과 출력을 연결해주는 층입니다.
여기서 1도 마찬가지로 예측할 열의 갯수가 1개 이기 때문입니다.
model = tf.keras.models.Model(X, Y) : 모델을 직접 설계 합니다.
model.compile(loss='mse') : MSE공식을 활용한 손실 함수를 통해 모델을 만듭니다.
MSE(Mean Squared Error) :평균 제곱 오차로서 간단히 말하면 오차의 제곱에 대해 평균을 나타낸것입니다. 이 때 값이 작을 수록 정확성이 높은것 입니다.

3. 모델 학습하기

model.fit(x, y, epochs=10)
모델을 학습합니다. 10번 반복합니다.
notion imagenotion image
10번 반복한 결과 : loss값이 높아 1000번 다시 한번 학습시켜보도록 하겠습니다.
model.fit(x, y, epochs=1000)
 
notion imagenotion image
 
notion imagenotion image
loss 값이 확실히 줄었다는 것을 알 수 있습니다.

4. 예측 하기

print(model.predict(x))
model.predict(x) : x를 매개체로 y값을 예측 합니다.
notion imagenotion image
print(model.predict([[30]]))
온도x값이 30도일 때 판매량을 예측 합니다.
notion imagenotion image
 
notion imagenotion image
정답과 예측 한 값이랑 많이 차이가 나는 것을 볼 수 있습니다.
→ 해결방법은 loss를 줄여 예측 값을 높이는 것입니다. 그래서 loss가 최대한 0에 수렴할 때 까지 학습시키면 예측률이 높아집니다.