물가가 많이 올라서 직장인들이 구내식당을 이용하러 많이 간다는 뉴스가 심심찮게 보이네요. 오늘은 구내식당과 관련한 이야기를 해보고자 합니다. 종업원이 많은 회사들은 구내식당을 운영하고 있는데요, 식당을 운영하다 보면 매 끼니마다, 준비해야하는 식수를 예상하고, 미리 식자재를 준비하고, 당일 요리를 해서 식사를 제공하고 있습니다. 식사인원이 많기 때문에 식당처럼 손님이 오면 그때그때 조리를 해서 제공하는게 아닌거죠.
단체급식을 주업종으로 하는 식품 대기업들은 많은 회사들과 계약을 해서, 구내식당 운영을 해주고 있는데요, 각각의 업장에서 그날의 식사인원을 예측하고 미리 준비하는데 많은 투자를 하고 연구를 하는것으로 알고 있습니다. 예측인원의 오차가 클수록 손실비용이 올라가거나 서비스의 질이 떨어지기 때문입니다.
이번에 프로젝트를 진행한 회사에도 구내식당이 있습니다. 매 끼니 200명~500명 정도로 적지않은 수가 식사를 하고 있는데, 직접 운영을 하다 보니 회사 소속의 영양사가 그 동안의 경험으로 식수를 예측하여, 식자재를 발주하고 당일의 이벤트를 고려해서 매 끼니를 준비하고 있습니다. 그러다보니 잔반이 많이 남는날도 있고, 반대로 식사준비량이 모자라서, 늦게 오는 분들이 발걸음을 되돌리는 경우도 가끔 있었답니다.
데이터로 한번 살펴볼까요.
중식을 기준으로, 하루 평균 220명이 식사를 하고, 최소 100명, 최대 320명으로 식사인원이 많은날과 적은날의 편차가 큽니다. 식자재의 과다발주 및 당일 식사인원이 예상보다 많은 경우, 음식물쓰레기가 늘어나고 처리비용이 발생됩니다. 음식물쓰레기 발생현황과 처리비용을 살펴보면 월 평균 4톤, 처리비용으로는 900,000원입니다. 연간으로 보면 총 48톤, 천만원 가량의 처리비용이 발생합니다.
자, 그럼 이제 여러가지 수집가능한 데이터를 이용해 식수예측을 해보려고 합니다. 식당운영과 관련된 빅데이터를 분석하여, 식수 예측모델을 개발하고, 이를 이용해 미래의 식수를 계산하여 제공하는 식수예측 시스템을 개발할 것입니다.
식수예측을 위해 수집할 수 있는 다양한 변수들이 있습니다. 인과관계가 있을지 없을지는 분석결과로 판단해야 하니, 주관적인 생각으로 미리 제외시키거나 소홀히 하는 실수는 하지 않아야 합니다.
식수예측에 고려할 수 있는 변수들
요일, 평균기온, 최고기온, 최저기온, 강수량, 신적설, 풍속, 습도, 운량, 일조시간, 날씨, 식사순서(시간), 내부적인 작업이벤트, 식단, 메뉴선호도, 휴일전일여부, 전주식사인원, 요일별 평균 식사인원, 월 평균 식사인원, 일일 식사가능인원, 근태정보, 코로나19상황, 과거식수, 근무인원, 성별비율, 연령대, 물가지수, 식료품가격 등 |
데이터 수집 방법
데이터 수집을 위해서는 회사 내부적으로 생성되는 데이터가 있고, 외부(인터넷 등)에서 구할 수 있는 데이터가 있습니다. 내부적으로는 그동안 기록하고 축적해놓은 과거 식수정보, 식단, 식사시간, 직원 근태정보, 정원정보 등이 있습니다. 일정 규모 이상의 회사들은 ERP등의 시스템에 모든 데이터를 보관하고 있기 때문에 권한만 있으면 데이터 확보를 할 수 있습니다. 위에 나열한 데이터들은 정형화된 DB에 보관이 되어 있으므로, 별도의 전처리가 필요치 않습니다.
외부에서 구할 수 있는 데이터들은 찾으면 찾을 수록 무궁무진하게 확보할 수 있습니다. 날씨데이터는 기상청에서, 회사에서 개방하여 제공하는 공공데이터, 통계청에서 제공하는 물가정보, 소비자물가지수, 식료품 가격 등 다양한 데이터를 확보할 수 있습니다. 외부데이터는 각각 다른 곳에서 수집하기 때문에 결측치가 있거나 비정상적인 값들이 있을 수 있기 때문에 분석을 할 수 있도록 데이터전처리 및 변환 작업을 적절히 해줘야 합니다.
데이터 분석
이제 정리한 데이터를 분석하여 변수들과 식수 간의 관계를 파악해봅니다. 하나 이상의 독립변수들이 종속변수에 미치는 영향을 추정할 수 있는 통계기법인 다중선형회귀분석이 이번 프로젝트에 가장 적합해 보입니다. 데이터분석을 처음 해보기에, 다루기 쉬운 엑셀을 이용해 데이터 분석을 먼저 합니다.
엑셀 외부데이터 분석 툴을 활용한 회귀분석은 각 요소(변수)를 지정하여 다중선형회귀분석을 수행하며, 매번 지정하는 요소를 1회성으로 분석하고 결과를 출력하기 때문에 많은 수의 변수를 조합하여 최적의 결과치를 도출하기 위해서는 일명 노가다가 필요합니다. 보기좋고, 쉽기 때문에 배제할 필요가 없는 방법입니다.
변수의 종류가 많아지고, 그에 따른 경우의 수(조합)이 많을 때에는 엑셀 회귀분석을 하게 되면 최적의 식을 찾기 위해서 회귀분석을 수행하는 시간이 한달은 더 걸릴 수 있을 겁니다. 본 프로젝트를 수행하면 최종 분석 후보군에 넣은 변수가 16개인데, 조합을 하면 131,070건 입니다. (일부 생략) 하나씩 엑셀로 수행한다치면 끔찍하죠...그래서 부랴부랴 공부한게 파이썬을 활용한 회귀분석입니다. 파이썬이 빅데이터 분석에 많이 활용한다고 알고 있었는데 실제 개발해 본적은 없어서, 걱정은 했지만 쉬운 언어군요. 많은 사람들이 사용하는 이유가 있네요.
파이썬 분석 라이브러리를 활용하여 데이터 분석 프로그램을 개발했습니다. 분석 라이브러리는 sklearn linear_model과 statsmodels 모두 사용해 보았고, 프로그램은 모든 조합의 경우를 모두 회귀분석해보고 결과치를 출력하는 형태로 개발 했습니다. 대단한 건 아니고, 시간을 절약해주는 소소한 도움을 주는 프로그램이지요.
결론적으로는 파이썬과 엑셀 모두 활용하여 결과를 정리했습니다. 사용해보면 각각의 장단점을 느낄 수 있기 때문에 파이썬 프로그램으로 일차 분석을 하고, 최종 후보 몇개에 대해서 엑셀로 다시한번 분석, 정리를 했습니다. 후보군은 표준오차, 결정계수, 조정된 결정계수 값이 높은 순으로 선정했습니다.
예측모델 도출 및 활용
분석한 결과는 방정식으로 만들어집니다. 이를 향후 식수예측에 그대로 적용할 수 있습니다. 예측모델에 선정이 된 변수들은 모두 미래의 값을 예상할 수 있어야 합니다. 예를 들어, 기상청 예보(기온, 강수량 등), 이벤트 는 미리 알 수 있기 때문에 예상치를 방정식에 대입하면, 결과값(예상식수)이 나오게 됩니다.
예상하여 출력하는 건 웹시스템이나 엑셀등으로 쉽게 제작할 수 있습니다. 다만 전적으로 믿어서는 안되고, 참고를 하는 정도로 운영을 합니다. 계속 쌓이는 데이터로 분석하고, 정리할 수록 점점 신뢰도는 높아질 것입니다.
결론
데이터분석을 해보면서 여러가지 시행착오와 깨닫는 부분이 많았습니다. 일절의 비용없이 혼자서 수행한 프로젝트라 빅데이터 분석 수준까지 미치지는 못한 것 같지만, 초기 계획한 성과 이상은 달성했다는 생각입니다.
결과치를 살펴보면 다중상관계수가 대부분 높게 나타납니다. 이는 변수간에 인과관계 있음을 의미하기 때문에 별도의 상관관계 분석 필요성이 있으며, 더욱 많은 변수들의 발굴이 필요함을 의미합니다.
메뉴의 선호도에 따른 식수변화도 있을것을 생각하고 선호도조사도 실시해보았지만, 이를 데이터화하여 분석에 활용하는 수준으로 만들지는 못했습니다. 여러모로 아쉬운 부분도 있지만, 한정된 시간으로 마무리하게 되었는데 다음에 기회가 된다면 더 업그레이드 해보고 싶습니다. 상세히 공유하지 못하는 부분도 있음을 양해해 주시고 읽어봐주셔서 감사합니다.
감사합니다.
※ 본 포스팅의 내용을 허락없이 도용하거나 사용하시면 안됩니다. 궁금한점 질문해주시면 친절히 답변 드리겠습니다.
'빅데이터, 데이터분석' 카테고리의 다른 글
파이썬으로 삼성전자 주식 가격 시각화 하기 (feat. 다운샘플링) (0) | 2023.07.21 |
---|---|
파이썬 주식 라이브러리 설치와 미국/한국 주식 시세 출력해보기 (0) | 2023.07.14 |
빅데이터 분석을 위한 파이썬 개발환경 구축 (0) | 2023.06.07 |
파이썬으로 빅데이터 다중선형회귀분석 구현하기 (3) | 2023.05.22 |
빅데이터 회귀분석의 기본이론 (0) | 2023.05.20 |