[Project] 다중선형회귀(multiple linear regression)를 통해 귤 썩는 날 예측하기/파이썬 구현/시각화/예제
안녕하세요, yejining입니다🍓
오늘부터 새로운 블로그 컨텐츠를 시작해볼까 하는데요.
그것은 바로... 이제까지 했던 프로젝트 정리해서 올리기 입니다 !! (두둥-!)

첫번째로 기록해 볼 프로젝트는 바로 "multiple linear regression을 통해 귤🍊 썩는 날 예측하기"입니다.
실험부터 모델까지 직접 구상하고 시행한 프로젝트라 애정이 큽니다!
서두가 길었죠? 그럼 바로 시작하겠습니다.
1. introduction
여러분은 귤을 좋아하시나요? 🍊
저는 앉은 자리에서 10개는 까먹을 수 있습니다 ㅋㅋㅋㅋ
그래서 겨울철만 되면 귤을 대량으로 구비해두는데요,
그러다보면 다 먹기도 전에 귤이 썩어버리는 대참사가 발생하고 맙니다...!

그렇다면 귤이 썩는 이유는 무엇일까요?
온도, 습도, 날씨 등등 다양한 요인들이 있을 것 입니다.
여기서 저는 이런 생각을 했습니다.
👩💻: 귤이 썩는데 영향을 미치는 요인 값을 안다면, 언제 귤이 썩는지 예측할 수 있지 않을까?
귤이 언제 썩을지를 알 수 있다면,
그전에 귤을 다 먹어버릴수도 있고 귤쨈을 만들 수도 있고 다른 사람들에게 나누어 줄 수도 있겠죠!
이러한 생각을 기반으로 실험을 진행하였습니다.
2. Experiment
총 18개의 귤을 가지고 실험을 진행하였습니다.
각 귤에게는 요인들을 다양하게 주고, 썩는 기간을 체크하였습니다.

변화를 준 요인은 총 3가지 였습니다.

- 햇빛의 유무(sunlight) : 어떤 귤들은 햇빛아래, 어떤 귤들은 검정비닐봉지로 덮어 햇빛을 차단시켰습니다
- 온도(temperature) : 냉장고(0~10도), 베란다(10~20도), 실내(20~30도) 이렇게 장소를 다르게 두어 온도를 변화시켰습니다.
- 습도(humidity) : 귤을 비닐팩안에 넣어 스프레이를 뿌린 후 습도를 변화시켰습니다.
비닐백에 요인에 대한 정보를 적어두어 헷갈리지 않도록 했습니다.

기숙사에 살던 시절이라 매일 수업이 끝난 후 기숙사로 돌아와 귤을 확인했던 기억이 나네요 ㅎㅎ
실험 결과는 어떤식으로 나오게 되었을까요? (궁금궁금~)
3. Data
실험결과를 테이블로 정리해보면 다음과 같습니다.
| SUNLIGHT | TEMPERATURE | HUMIDITY | PERIOD | |
| 귤1 | 1 | 25 | 70 | 48 |
| 귤2 | 1 | 25 | 70 | 42 |
| 귤3 | 1 | 25 | 60 | 60 |
| 귤4 | 1 | 25 | 60 | 54 |
| 귤5 | 1 | 25 | 50 | 72 |
| 귤6 | 1 | 25 | 50 | 80 |
| 귤7 | 1 | 15 | 70 | 72 |
| 귤8 | 1 | 15 | 70 | 66 |
| 귤9 | 1 | 15 | 60 | 72 |
| 귤10 | 1 | 15 | 60 | 72 |
| 귤11 | 1 | 15 | 50 | 108 |
| 귤12 | 1 | 15 | 50 | 114 |
| 귤13 | 0 | 25 | 70 | 120 |
| 귤14 | 0 | 25 | 70 | 120 |
| 귤15 | 0 | 25 | 60 | 144 |
| 귤16 | 0 | 25 | 60 | 138 |
| 귤17 | 0 | 15 | 70 | 168 |
| 귤18 | 0 | 15 | 70 | 174 |
(⛔소중한 데이터이니 무단 사용을 금합니다.)
각 변수와 귤이 썩은 기간과의 관계를 그래프로 확인해 볼까요?
각 데이터를 잘 확인하기 위해 matplotlib의 scatter을 사용했습니다.
1. 햇빛 유무와 기간간의 관계
import matplotlib.pyplot as plt
plt.scatter(df['SUNLIGHT'],df['PERIOD'])
plt.xlabel('sunlight')
plt.ylabel('period')
plt.show()

햇빛을 받지 않은 귤이 더 오래 살아남았습니다.
2. 온도와 기간의 관계
plt.scatter(df['TEMPERATURE'],df['PERIOD'])
plt.xlabel('temperature')
plt.ylabel('period')
plt.show()

(명확하진 않지만) 대체적으로 온도가 낮은 귤들이 오래살아남았습니다.
3. 습도와 기간의 관계
plt.scatter(df['HUMIDITY'],df['PERIOD'],)
plt.ylabel('humidity')
plt.xlabel('period')
plt.show()

습도는 해석하기 힘든 그래프가 나왔네요!
습도가 높은 귤들에서 살아남은 기간이 짧은 것과 긴것 모두 나왔으닌깐요.
그럼 여기서는 습도보다 더 영향을 끼치는 무엇인가 존재한다 정도로 생각할 수 있습니다.
이번에는 이 데이터를 가지고 multiple linear regression에 적용시켜 볼 것 입니다.
4. Multiple linear regression
multiple linear regression, 일명 다중 선형 회귀는 여러 변수를 가지고 특정한 값을 예측하는 모델입니다.
변수들을 X1, X2, X3 ... 예측해야하는 값을 Y라고 두면, 이러한 함수를 가지게 됩니다.

b와 m1, m2 ...를 잘 조절해서 각 점들을 잘 표현하는 즉 오차가 적도록 표현하면 됩니다.

제 데이터에서는 X값이 햇빛의 유무, 온도, 습도가 될 것이고 Y값이 기간이 될 것 입니다.
왜냐하면 기간을 예측하는 모델을 만들것이닌깐요.
그렇다면 sklearn 패키지를 이용해서 model을 만들어 봅시다!
from sklearn.linear_model import LinearRegression
x = df[['SUNLIGHT', 'TEMPERATURE', 'HUMIDITY']]
y = df['PERIOD']
mlr = LinearRegression()
mlr.fit(x, y)
b와 m1, m2, m3값도 확인해 봅시다.
print(mlr.intercept_, mlr.coef_)
>329.0999999999998 [-89.23333333 -3.22 -1.73 ]
출력값을 통해 PERIOD = -89.23*SUNLIGHT -3.22*TEMPERATURE -1.73*HUMIDITY +329.09 라는 식을 얻었습니다.
이제 이 식을 이런식으로 사용할 수 있습니다.
🤔 : 귤을 햇빛이 없고 온도는 15도에 습도는 60인 곳에 두면 얼마나 갈까?
😊 : -89.23*0-3.22*15-1.73*60+329.09 = 176.99 닌깐 176.99일 정도 가겠네 !
5. conclusion
물론 이 실험에는 한계점이 엄.청.나.게 많습니다.
우선 데이터가 너무 부족합니다.
저의 소중한 귤을 희생시켜야했기 때문에 어쩔 수 없었습니다만...🍊💦
실제로 이런 모델을 구축하기 위해서는 데이터 수가 더 많아야합니다.
그래서 train 데이터와 test 데이터를 나누어서 정확도 파악까지 해야합니다.
그리고 온도, 습도, 태양유무 말고도 귤이 썩는데 영향을 미치는 요인들은 많을 것 입니다.
그런 요인들을 추가시키고, 요인들간의 상관관계를 없애야만 정확한 모델을 만들 수 있을 것 입니다.
그래도 재미있는 실험이었습니다! 🤩
