오픈 데이터베이스를 활용하여, SQL Server에서 제품 판매 데이터를 불러와 주요 제품군을 K-Means 군집화 기법으로 분류하고, 각 군집의 특성을 파악하여 향후 판매 예측에 활용하는 것을 목표로 함. 총 판매량과 가격을 기반으로 제품을 세 개의 군집으로 나누어 분석.
기술 스택
프로그래밍 언어: Python, SQL
라이브러리: Pandas, PyODBC, Scikit-Learn, Matplotlib
모델링 기법: K-Means 군집화, 실루엣 스코어 평가
프로젝트 상세 설명
데이터 수집 및 전처리
SQL 데이터베이스 연결: SQL Server에서 AdventureWorks2022 데이터베이스의 SalesOrderDetail 및 Product 테이블을 활용하여 제품 ID, 제품명, 총 판매량, 가격, 카테고리 정보를 조회.
결측치 제거 및 스케일링: 가져온 데이터에서 결측치를 제거하고, 판매액(TotalSales) 과 가격(Price) 컬럼을 표준화하여 군집화에 적합한 형태로 전처리.
SELECT
ssod.ProductID,
pp.Name AS ProductName,
SUM(ssod.LineTotal) AS TotalSales,
pp.StandardCost AS Price,
pps.Name AS Category
FROM
Sales.SalesOrderDetail ssod
JOIN
Production.Product pp ON ssod.ProductID = pp.ProductID
JOIN
Production.ProductSubcategory pps ON pp.ProductSubcategoryID = pps.ProductSubcategoryID
GROUP BY
ssod.ProductID, pp.Name, pp.StandardCost, pps.Name
ORDER BY
TotalSales DESC
제품번호를 기준으로,제품이름, 제품별 총 합계 가격, 판매 가격,제품의 카테고리 추출
KMeans 군집화 적용
군집화 설정: KMeans 모델을 사용해 총 판매량과 가격을 기준으로 세 개의 군집으로 데이터를 분류.
# 새로운 데이터 준비
new_data = {'TotalSales': 4400592, 'Price': 1251}
# 새로운 데이터 스케일링
scaled_data = scaler.transform([[new_data['TotalSales'], new_data['Price']]])
# KMeans 모델을 사용해 클러스터 예측
predicted_cluster = k_means_Model.predict(scaled_data)
# 예측된 클러스터 출력
print(f'Predicted Sales Cluster: {predicted_cluster[0]}')
결과
결과 시각화 및 군집별 요약
군집 시각화: Matplotlib을 활용하여 총 판매량과 가격에 따른 군집을 시각적으로 표현하고, 각 군집의 분포를 확인.
군집별 특성 요약: 각 군집의 평균 가격, 평균 총 판매량 및 대표 카테고리를 요약하여 분석 결과를 표로 정리.
Cluster 0
낮은 가격대, 낮은 판매량
Cluster 1
높은 가격대, 중간 판매량
Cluster 2
중간 가격대, 높은 판매량
결과
제품군에 대한 인사이트 제공: 총 판매량과 가격을 기준으로 제품군을 분류함으로써, 주요 제품군의 판매 경향을 파악함
미래 판매 예측 가능성 확보: 새로운 판매 데이터를 입력했을 때 해당 데이터가 속할 군집을 예측하여, 향후 특정 제품군의 판매 경향을 예측하고 마케팅에 활용할 수 있도록 함.
추가 개선 방향
이번 분석에서는 판매액과 가격을 기준으로 K-Means 군집화를 수행했습니다. 초기에는 제품 카테고리를 함께 고려하여 더 세밀한 분석을 목표로 했으나, 범주형 변수를 수치형으로 변환하는 데 어려움이 있어 수치형 데이터만 활용했습니다.