목차
- 미니프로젝트 5차
- 미니프로젝트 6차
- 1차 에이블 데이
미니프로젝트 5차
미니프로젝트 5차는 6월에 있을 AICE ASSOCIATE 시험 대비로 관련 문제가 포함된 파일을 받아서 연습을 해보며 진행되었다.
AICE란,
Future부터 Professional까지
AICE가 평가하는 시험의 종류는 다음과 같습니다.
AICE Future : 가장 기본적인 수준의 시험으로, AI에 대한 기본적인 이해와 관련된 지식을 평가합니다. 이 시험은 일반적으로 AI에 대한 이해를 돕는 교육 과정을 수료한 후 시도하기 적합합니다.
AICE Junior : 약간 더 진행된 수준의 시험으로, AI를 활용한 문제 해결 능력을 평가합니다. AI의 기본 개념에 대한 이해를 바탕으로 실제 문제를 해결하는 능력을 평가합니다.
AICE Basic : AI의 기본적인 기술을 활용하는 능력을 평가하는 시험입니다. 이 시험은 데이터 분석 및 전처리, 기본적인 AI 모델링에 대한 이해를 평가합니다.
AICE Associate : 이 시험은 AI를 활용한 개발 능력을 평가합니다. 데이터 분석, 전처리, AI 모델링뿐 아니라 이를 실제 문제 해결에 적용하는 능력에 중점을 둡니다.
AICE Professional : 가장 고급 수준의 시험으로, AI 기술을 활용한 전문적인 개발 능력을 평가합니다. AI를 이용한 복잡한 문제 해결과 개발 능력, 그리고 AI 기술을 효과적으로 활용하여 전략을 수립하고 결정을 내리는 능력을 평가합니다.
AICE의 온라인 시험 방식
시험 구성 및 레벨별 설명
AICE는 회차별로 실시하는 시험의 종류가 다르며, 대부분의 회차에서 ‘베이식’과 ‘어소시에이트’ 두 가지 시험이 진행됩니다.
Basic 등급 : 코딩 경험이 없는 사람들도 참여할 수 있습니다. KT가 제작한 ‘AIDU ez’라는 도구를 사용하여 15개의 문항에 대해 60분 동안 답변을 제출하면 됩니다. 이 시험은 AI의 기본 원칙을 이해하고, AI를 업무에 활용하며, 그 결과를 해석할 수 있는 능력을 평가하는 것을 목표로 합니다.
Associate 등급은 실무에서 가장 많이 사용되는 파이선 언어에 대한 이해가 필요합니다. 표 형식의 데이터 분석 및 처리, 머신러닝과 딥러닝을 활용한 모델링 등의 내용을 다룹니다. 14개의 문항을 90분 동안 풀어야 합니다.
미니프로젝트 6차
벌써 미니프로젝트의 끝이 보인다. 이번 미니프로젝트는 시계열 데이터를 사용해 판매량 예측 프로젝트와 QA 챗봇을 구현하는 프로젝트를 진행했다. 초반에 강의를 같이 시작했던 한기영 강사님과 다시 만나게 되면서 거의 마지막 미니프로젝트를 같이 보내게 되다니..
유통 판매량 예측 및 재고 최적화
미션은 3개의 대상 상품을 조원별로 나눠서 각 상품에 대해 데이터 탐색, 가설수립 및 데이터셋을 구성했다. 나는 42번 상품을 대상으로 진행했다.
### 1) 대상 매장(44), 대상 전체, 3 상품의 판매량 추이
# 전체 제품 판매량 확인
target_store = 44
target_products = [ 3 , 12 , 42 ]
filtered_sales = sales [( sales [ 'Store_ID' ] == target_store ) & ( sales [ 'Product_ID' ] .isin ( target_products ))]
pivot_sales = filtered_sales.pivot_table ( index = 'Date' , columns = 'Product_ID' , values = 'Qty' , aggfunc = 'sum' )
# 시각화
plt.figure ( figsize = ( 14 , 7 ))
plt.title ( 'Sales Trend for Selected Products at Store 44' )
for product in target_products :
plt.plot ( pivot_sales.index , pivot_sales [ product ], label = f 'Product { product } ' )
plt.legend ( title = "Product ID" )
plt.xlabel ( 'Date' )
plt.ylabel ( 'Quantity Sold' )
plt.show ()
전체 상품으로 3개의 상품에 대한 시각화
# 전체 상품에 동일 카테고리의 상품별 판매량 추이 확인
category_list = products [ products [ 'Product_ID' ] .isin ( target_products )][ 'Category' ] .unique ()
category_products = products [ products [ 'Category' ] .isin ( category_list )]
category_sales = sales [ sales [ 'Product_ID' ] .isin ( category_products [ 'Product_ID' ])]
pivot_category_sales = category_sales.pivot_table ( index = 'Date' , columns = 'Product_ID' , values = 'Qty' , aggfunc = 'sum' )
# 카테고리별 판매 추이 시각화
plt.figure ( figsize = ( 14 , 7 ))
plt.title ( 'Sales Trend by Product Category' )
sns.lineplot ( data = pivot_category_sales )
plt.xlabel ( 'Date' )
plt.ylabel ( 'Quantity Sold' )
plt.legend ( title = "Product ID" )
plt.show ()
상품의 동일 카테고리의 상품별 판매량 추이
plt.figure ( figsize = ( 15 , 15 ))
plt.title ( '44번 매장 42번 제품의 시간별 판매량' )
sns.lineplot ( x = 'Date' , y = 'Qty' , data = df_sp [( df_sp [ 'Store_ID' ] == 44 ) & ( df_sp [ 'Product_ID' ] == 3 )])
대상 상품의 시계열 패턴을 찾아보고 다른 상품들도 패턴을 찾아보며 조원들과 함께 데이터 분석 결과에 대한 내용을 공유하고 결과를 도출했다.
추가적으로 주말과 공휴일 API를 활용해 미국 공휴일과 파생 변수로 주말 데이터를 추출해 시각화를 진행하고 주말과 공휴일에 판매가 영향에 끼치는지 가설을 설정하고 분석했다.
import matplotlib.pyplot as plt
plt.rcParams [ 'font.family' ] = 'NanumGothic'
import requests
import pandas as pd
def get_us_holidays ( start_year , end_year ) :
for year in range ( start_year , end_year + 1 ):
response = requests.get( url )
if response.ok:
holidays = response.json()
for holiday in holidays:
date = pd.to_datetime( holiday [ 'date' ])
if date >= pd.to_datetime( '2014-01-01' ) and date <= pd.to_datetime( '2017-02-28' ):
print ( date.date (), holiday[ 'localName' ])
get_us_holidays ( 2014 , 2017 )
def fetch_us_holidays ( start_year , end_year ) : # 미국 공휴일 데이터 가져오기
holidays_dict = {}
for year in range ( start_year , end_year + 1 ):
response = requests.get( url )
if response.ok:
holidays = response.json()
for holiday in holidays:
date = pd.to_datetime( holiday [ 'date' ])
if start_year <= date.year <= end_year:
holidays_dict [ date.date ()] = holiday[ 'localName' ]
return holidays_dict
def create_holidays_dataframe ( start_year , end_year ) : # 공휴일 DataFrame 으로 변환
holidays_dict = fetch_us_holidays( start_year , end_year)
holidays_df = pd.DataFrame( list ( holidays_dict.items ()), columns= [ 'Date' , 'Holiday' ])
holidays_df [ 'Date' ] = pd.to_datetime( holidays_df [ 'Date' ])
return holidays_df
holidays_df = create_holidays_dataframe( 2014 , 2017 ) # 공휴일 DF
target_store = 44
target_product = 3 # 상품 3의 판매 데이터
filtered_sales = sales[( sales [ 'Store_ID' ] == target_store) & ( sales [ 'Product_ID' ] == target_product)]
filtered_sales [ 'Weekday' ] = filtered_sales[ 'Date' ] .dt.dayofweek # 주말 데이터 추가
filtered_sales [ 'IsWeekend' ] = filtered_sales[ 'Weekday' ] .isin ([ 4 , 5 ]) # 금요일(4), 토요일(5)
combined_data = pd.merge( filtered_sales , holidays_df, on= 'Date' , how= 'left' ) # 공휴일 데이터 병합
combined_data [ 'IsHoliday' ] = combined_data[ 'Holiday' ] .notna ()
plt.figure ( figsize = ( 15 , 7 )) # 시각화
sns.lineplot ( data = combined_data , x= 'Date' , y= 'Qty' , hue= 'IsHoliday' , palette= 'Set1' , marker= 'o' )
plt.title ( 'Sales for Product 3 with Holidays,Weekends' )
plt.xlabel ( 'Date' )
plt.ylabel ( 'Sales Quantity' )
plt.show ()
도출된 결과
음료
시간에 따른 변동성이 큼
미국의 여름인 6~8월에 판매량이 많은 것으로 예측했지만 일정한 패턴을 보이는 것 같다.
15,16,17년 1월에 판매량이 낮음.
특정 시점인 매년 9월 부터 판매량이 증가하는 것을 확인
특히 14년 5월 전후, 15년 1월~5월까지 판매량이 저조
하지만 다른 상품에 비해 높은 판매량을 갖고 있음
제품 3인 음료는 유가의 변동과는 상관이 없어 보임
1월에 방문객이 많은 것을 확인 그에 비해 음료의 판매량은 저조하며 음료의 판매량은 9월~1월 사이에 많이 분포
특정 시점인 16년 5월전후로 판매량 급상승
15년 6~7월 부터 16년 1월까지는 방문객이 많이 감소한 기간도 보임
판매량 데이터는 주기적인 변동을 보여 주며, 특히 몇몇 높은 부분으로 보아 주말, 공휴일, 프로모션, 이벤트 등 다양한 영향을 끼칠 것으로 생각이 듬.
공휴일 영향: 공휴일에는 판매량에 큰 변동이 있음
주말 판매 추세: 주말에는 판매량이 다소 증가하는 경향이 있음
시간이 지남에 따라 증가하는 경향
가격의 추세는 우상향을 띄고있다.
전체적으로 연간 계절성이 보이고, 잔차도 꽤 있는 것 같다.
Subcategory 중 agricultural products(농산물)이 - 특히 시계열을 띄고 있는 것으로 보인다. 대부분의 데이터가 주 단위 시계열 패턴을 보인다.
방문고객수도 상관관계 없음
계절에 따른 상관관계 있음 (1,2월에 판매량 낮고, 7,8월 판매량 높음)
요일에 따른 상관관계 있음 (평일에 비교적 판매량 낮고, 금/주말에 판매량 높음)
유가는 상관관계 없음
12월에 많은 판매량을 보임. 근데 딱히 크리스마스 때문같진 않은거 같음
겨울이 길고 엄청 추워서 그런지 12월에 미리미리 사는건가 판매량이 제일 많다
다른 food들도 비슷한데 냉동은 안팔리다가 겨울이 올때쯤 엄청 팔림. 보관기간이 길어서 다들 마트 자주 안올려고 많이 사는거 같기도
기름값은 아무리봐도 함정같다.
한번씩 튀는 값들이 있는거 같은데 이유를 찾기는 못해서 일단 이상치라고 생각함.
판매 패턴은 매년 비슷한 느낌이다.
역시 주말이 가장 많이 팔림
12월 겨울에 많은 고객들이 찾고 비교적 평소보다 많은 양의 판매량을 기록 하였습니다.
요일별 패턴: 주중과 주말 간에 판매량에 차이가 있음을 관찰했습니다. 일반적으로 주말에는 판매량이 증가하는 경향을 보였습니다.
휘발유 가격과 상품 판매량 비교: 휘발유 가격과 상품 판매량 간의 관계를 탐색하였고, 일부 경우에는 휘발유 가격이 높아질수록 상품 판매량이 감소하는 경향을 발견했습니다.
방문 고객수와 상품 판매량 비교: 매장을 방문한 고객 수와 상품 판매량 간의 관계를 분석하였고, 이를 통해 고객의 방문이 상품 판매량에 미치는 영향을 이해할 수 있었습니다.