[Tensorflow / Deep learning] 레모네이드 판매 예측
요즈음 딥러닝이 정말 '핫' 하다.
회사에서도 딥러닝 기반 기능 개발이 되어가고 있고, 뉴스에서도 심심찮게 나온다.
재작년에 조금 공부하고 손 놨었는데, 다시 하나씩 공부해보려고 포스팅 한다.
우선 딥러닝을 하기위해선 필수 불가결적으로 4가지 단계가 필요하다.
- 과거 참조할 데이터
- 모델의 구조
- 참조할 데이터를 모델에 학습 시키기.
- 해당 모델을 이용하여 결과 데이터 추출하기.
자 그럼 간단한 문제를 하나 풀어보도록 하자.
위의 이미지는 과거 참조할 데이터이다.
해당 이미지의 온도가 만약 15도 일때, 판매량을 예측하는 프로그램을 만들고자 한다.
그럼 위의 데이터를 참조할 데이터로 정하고 시작해보자.
기본적으로 tensorflow와 pandas를 사용할 것이다.
pandas는 C#으로 생각하면 DataGridView 형식의 데이터를 읽어오는 라이브러리이다. 참조 데이터는 아래 링크를 참조하자.
https://raw.githubusercontent.com/HyunjunKim1/Opentutorial_Deeplearning/main/lemonade.csv
이후 파일 경로에 있는 csv 형식의 데이터를 읽어온다.
그리고 변수 설정을 해준다. 위의 참조할 데이터에서 왼쪽에 있는 온도가 독립변수가 되고, 오른쪽의 판매량이 종속변수가 된다.
이후 해당 변수들이 정확하게 입력 되었는지 확인을 해준다.
그리고 가장 학습에 중요한 계층 설정을 해준다. 아래 이미지를 참조해보자.
독립변수와 종속 변수의 수에 따라서 만들고자하는 모델의 shape 수와 Dense의 수를 정해준다.
Deep learning은 Artificial neural network라고도 불린다고 한다.
독립변수와 종속변수가 각 하나씩 입력이 되는 것인 이 예제는 수많은 신경계의 뉴럴중 단 하나만 쓰기에 아~주아주 간단하게 만든것이다.
자 그럼 4가지 단계중 두가지가 끝났고, 참조할 데이터를 모델에 학습시켜보자.
위의 이미지는 독립변수와 종속변수를 만들고자 하는 model에 학습(fit) 시키는 것이다.
여기서 끝에 epochs는 반복할 횟수를 뜻하고, loss는 오차값을 의미한다.
아래 이미지를 참조해보자. loss 값을 추출하는 내용이다.
이와 같이 실제 판매량과 예측값이 달라질경우 그 해당값에 제곱을 해준다.
그리고 각 행의 예측값에 제곱을해준뒤, 모두 더해줘서 평균값이 여기서 나오는 loss 이다.
그럼 loss값이 작을수록 좋지않은가? 위의 데이터에선 loss율이 900 언저리로 나오는데,
반복을 더 해주면 해줄수록 0에 가까워지고, loss 값이 0에 가까워 질수록 학습이 제대로 된 모델이다.
그래서 아래 학습을 10000번 해주도록 하고, 표기를 하지않은 후, 10번의 학습을 더 시켜보도록 하자.
그럼 loss 값이 1.4401e-04로 나온다. 이 값은 0.0001 즈음 으로 보면된다.
0에 아주 가까워져 정확도가 상당히 높은것을 알 수 있다. 그럼 학습된 모델을 Test 해보자.
모델에 독립변수를 넣어 결과값을 확인해보자.
바로 아래 기본적으로 제공되는 종속변수의 값과 거의 동일한것을 알 수 있다.
즉, 학습이 아주 잘 되었다는 것을 알 수 있다.
그럼 아래 학습된 모델을 가지고 결과를 확인해보자.
" 만약 온도가 15도 일 경우에 판매량은 얼마나 될까? "
독립변수인 온도에 15도를 넣은 후 종속되는 종속변수의 값이 30.01804로 나온다.
학습이 잘 된것으로 보인다.
딥러닝 입문할 때 교육으로 가장 많이 활용되는 레모네이드, 보스턴 집값, 아이리스 꽃말 등 여러개중 레모네이드를 알아보았다.
여러가지 딥러닝 예제를 풀어본 후 실제로 활용되는 여러가지를 만들어볼 계획이니 하나씩 포스팅 하도록 하겠다.
Code ( Python )
import tensorflow as tf
import pandas as pd
# Data set
filePath = 'https://raw.githubusercontent.com/HyunjunKim1/Opentutorial_Deeplearning/main/lemonade.csv'
data = pd.read_csv(filePath)
data.head()
# 변수 설정
independent = data[['온도']] #독립변수
dependent = data[['판매량']] #종속변수
# 데이터가 나뉘어졌는지 확인하기
print(independent.shape, dependent.shape)
# Make model
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')
model.fit(independent, dependent, epochs=10000, verbose=0)
model.fit(independent, dependent, epochs=10)
# 만든 모델에 독립변수를 넣어서 결과값 확인하기.
print(model.predict(independent))
# 기본으로 제공되는 종속변수의 값
dependent
# 결과값 확인.
# 만약 독립변수가 15일 경우일 때 학습 된 모델을 거쳐서 어떠한 값이 나오는지 확인
print(model.predict([[15]]))
참조
https://www.youtube.com/channel/UCOAyyrvi7tnCAz7RhH98QCQ
우연히 알게된 유투버 봉수골 개발자 이선비님... 좋은강의 정말 진짜 감사합니다.