판매 건수를 통한 서버 최적화
2024. 10. 12. 18:00ㆍ데이터분석
프로젝트 개요
웹사이트의 시간대 및 요일별 판매 건수를 분석하여 서버 과부하를 예방할 수 있는 근거 데이터를 제공하는 것을 목표로 함
특정 시간대와 요일에 판매 건수가 증가하는 패턴을 파악함으로써, 서버 리소스를 효율적으로 관리하고 방지할 수 있도록 지원함.
기술 스택
- 프로그래밍 언어: Python
- 라이브러리: pandas, numpy, seaborn, matplotlib, scikit-learn
- 분석 기법: 데이터 전처리, 피벗 테이블 생성, 선형 회귀, R² 점수 계산
프로젝트 상세 설명
데이터 수집 및 전처리
- 데이터 불러오기: pd.read_excel을 사용해 시간대 및 요일별 웹사이트 트래픽 데이터를 불러옴.
- 필요한 컬럼 선택:
트래픽 패턴 분석에 중요한 변수인 날짜(CRI_YM), 요일, 시간대, 성별, 연령대, 트래픽 건수(건수합계)를 선택 - 데이터 정제:
결측치를 제거하고, 시간대와 연령대의 앞 한 글자만 남김.
CRI_YM에서 연도를 추출하여 연도별 변화를 쉽게 비교할 수 있도록 데이터 형식을 변환
더보기
코드
import pandas as pd
import numpy as np
pd_DataSet = pd.read_excel("C:\\Users\\KOPO\\OneDrive - 한국폴리텍대학\\폴리텍\\프로젝트\\samsung\\SAMSUNGCARD_ONLINE_DATA.xlsx", sheet_name="DATA")
print(pd_DataSet.columns)
New_DF = pd_DataSet[['CRI_YM', 'TAG', '평일휴일', '요일', '시간대', '성별', '연령대', '건수합계']].dropna()
# 시간대 열에서 앞의 한 글자만 남기기
New_DF['시간대'] = New_DF['시간대'].str[0]
New_DF['연령대'] = New_DF['연령대'].str[0]
New_DF['연도'] = New_DF['CRI_YM']//100 +3
# 기존 데이터 피벗 테이블 생성
pivot_DF = New_DF.pivot_table(index=['요일', '시간대'], columns='연도', values='건수합계', aggfunc='sum').fillna(0)
# 결과 출력 확인
print(pivot_DF.head())
결과
데이터 피벗 및 모델 학습
- 피벗 테이블 생성:
요일과 시간대를 기준으로 연도별 트래픽 데이터를 피벗 테이블로 구성하여 연도별 트래픽 변화를 파악 - 선형 회귀 모델: LinearRegression을 사용해 2025년 트래픽을 예측.
각 요일과 시간대별로 2022년~2024년의 데이터를 기반으로 회귀 모델을 학습시키고,
2025년의 구매건수를 예측하여 데이터에 추가. - 모델 평가: R² 점수를 통해 모델의 설명력을 확인하고, 평균 R² 점수로 전체 모델의 신뢰도를 평가.
- 엑셀 저장: 2022~2024년 데이터와 2025년의 예측된 값을 엑셀로 저장
더보기
코드
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
pivot_prediction = pivot_DF.copy()
pivot_prediction[2025]=np.nan
r2_list = []
for i in pivot_prediction.index:
data = pivot_prediction.loc[i,pivot_DF.columns].dropna()
X=data.index.values.reshape(-1,1) # 2차원 배열로 변환
Y=data.values
model = LinearRegression()
model.fit(X, Y)
# 2025년 예측
predicted_count = model.predict(np.array([[2025]]))
pivot_prediction.loc[i, 2025] = predicted_count[0]
# R^2 점수 계산 (2022-2024년 데이터에 대한 모델의 설명력)
y_pred = model.predict(X)
r2 = r2_score(Y, y_pred)
r2_list.append(r2)
# R^2 Score 평균 출력
average_r2 = np.mean(r2_list)
print("Average R^2 Score:", average_r2)
print(pivot_prediction.head())
# 엑셀 파일로 저장
pivot_prediction.to_excel('C:\\Users\\KOPO\\OneDrive - 한국폴리텍대학\\폴리텍\\프로젝트\\samsung\\2025_prediction.xlsx', index=True)
결과
결과 분석 및 시각화
- 시각화:
Seaborn의 FacetGrid를 이용하여 요일별로 각 시간대의 트래픽 추이를 시각화.
이를 통해 각 시간대 및 요일별 트래픽 변화 패턴을 시각적으로 확인함.
더보기
코드
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "Malgun Gothic"
# pivot_DF를 길게 변환하여 pivot_long 생성
pivot_long = pivot_prediction.reset_index().melt(id_vars=["요일", "시간대"], var_name="연도", value_name="건수합계")
# FacetGrid를 사용하여 요일을 별도의 서브플롯으로 분리하고, 시간대를 hue로 설정
g = sns.FacetGrid(pivot_long, col="요일", hue="시간대", height=4, aspect=1.2, col_wrap=3)
g.map(sns.lineplot, "연도", "건수합계", marker="o")
g.add_legend(title="시간대")
g.set_axis_labels("연도", "건수 합계")
g.set_titles("{col_name}요일")
# x축을 정수 연도 값으로만 설정
for ax in g.axes.flat:
ax.set_xticks([2022, 2023, 2024, 2025]) # 연도 단위로 눈금 설정
plt.subplots_adjust(top=0.9)
g.fig.suptitle("요일별 시간대 및 연도에 따른 건수 합계 변화")
plt.show()
결과
결과 및 고찰
- 서버 과부하 방지:
2025년 요일 및 시간대별 트래픽을 예측하여, 트래픽 급증이 예상되는 시간대에 서버 과부하를 예방할 수 있는 근거데이터를 제시할 수 있음 - 모델 신뢰도 검증: R² 점수를 통해 모델의 설명력을 확인하여, 평균 R² 점수를 바탕으로 예측 결과의 신뢰도를 평가
이번 분석에서는 시간대 및 요일별 판매 건수를 중심으로 패턴을 파악하고 서버 과부하를 방지하기 위한 기초데이터를 확보하고자 했습니다.
하지만 트래픽 패턴을 보다 정확하게 분석하기 위해서는 판매 건수 외에도 클릭 수, 장바구니 추가 횟수, 페이지 방문 수 등 다양한 지표가 포함되어야 합니다.
이후에는 여러 데이터들을 결합해 보다 정교하게 분석하여 예측의 신뢰도를 높이고자 합니다.
'데이터분석' 카테고리의 다른 글
판매율 기반 군집 (0) | 2024.10.11 |
---|---|
다음달 판매 예측 (0) | 2024.10.02 |
Boston 범죄데이터 분석 (0) | 2024.09.30 |
제품 판매 데이터 분석 (0) | 2024.07.22 |