제품 판매 데이터 분석

2024. 7. 22. 18:00데이터분석

프로젝트 개요

오픈 데이터베이스를 활용하여, SQL Server에서 제품 판매 데이터를 불러와 주요 제품군을 K-Means 군집화 기법으로 분류하고, 각 군집의 특성을 파악하여 향후 판매 예측에 활용하는 것을 목표로 함.
총 판매량과 가격을 기반으로 제품을 세 개의 군집으로 나누어 분석.

기술 스택

  • 프로그래밍 언어: Python, SQL
  • 라이브러리: Pandas, PyODBC, Scikit-Learn, Matplotlib
  • 모델링 기법: K-Means 군집화, 실루엣 스코어 평가

프로젝트 상세 설명

데이터 수집 및 전처리

  • SQL 데이터베이스 연결:
    SQL Server에서 AdventureWorks2022 데이터베이스의 SalesOrderDetail 및 Product 테이블을 활용하여
    제품 ID, 제품명, 총 판매량, 가격, 카테고리 정보를 조회.
  • 결측치 제거 및 스케일링: 가져온 데이터에서 결측치를 제거하고,
    판매액(TotalSales) 과 가격(Price) 컬럼을 표준화하여 군집화에 적합한 형태로 전처리.
더보기

데이터 베이스 연결

# 데이터베이스 연결 설정
server = 'DESKTOP-56V8VR4\\SQLEXPRESS'
database = 'AdventureWorks2022'
driver = 'ODBC Driver 17 for SQL Server'
connection_string = f'DRIVER={driver};SERVER={server};DATABASE={database};Trusted_Connection=yes;'
cnxn = pyodbc.connect(connection_string)
cursor = cnxn.cursor()

 

데이터 수집

Sales.SalesOrderDetail 테이블에서
ProductID(제품명), LineTotal(가격*수량)


Production.Product테이블에서
 
ProductID(제품명), name(제품이름),
 
StandardCost(가격 원가), 
ProductSubcategoryID(카테고리)


Production.ProductSubcategory 테이블에서
 
ProductSubcategoryID(카테고리), Name(카테고리 이름)

사용 쿼리

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 모델을 사용해 총 판매량과 가격을 기준으로 세 개의 군집으로 데이터를 분류.
더보기
# KMeans 군집화
k_means_Model = skc.KMeans(n_clusters=3, random_state=42)             
k_means_Model.fit(scaled_features)
Re = k_means_Model.predict(scaled_features)
New_DF['SalesCluster'] = Re

모델 평가 및 예측

  • 실루엣 스코어 계산:
    각 군집의 응집도를 평가하기 위해 실루엣 점수를 측정하여 군집화 품질을 검토.
    실루엣 스코어는 0.75로 비교적 높게 군집 됨
  • 새로운 데이터 예측:
    새로운 판매 데이터가 주어졌을 때, 해당 데이터가 속할 수 있는 군집을 예측하여
    앞으로의 제품 판매 경향을 분석할 수 있도록 함.
더보기

실루엣 스코어

새로운 데이터 입력

# 새로운 데이터 준비
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 군집화를 수행했습니다.
초기에는 제품 카테고리를 함께 고려하여 더 세밀한 분석을 목표로 했으나,
범주형 변수를 수치형으로 변환하는 데 어려움이 있어 수치형 데이터만 활용했습니다.

향후에는 카테고리를 포함한 분석을 통해 더욱 정밀한 군집화를 시도할 예정입니다.

제품 판매 데이터 분석.py
0.00MB

'데이터분석' 카테고리의 다른 글

판매 건수를 통한 서버 최적화  (0) 2024.10.12
판매율 기반 군집  (0) 2024.10.11
다음달 판매 예측  (0) 2024.10.02
Boston 범죄데이터 분석  (0) 2024.09.30