علوم داده - Data Science

تحلیل داده‌های مشتریان (Customer Analytics) با استفاده از کتابخانه Pandas

تحلیل داده‌های مشتریان چیست؟

این فرآیند شامل استفاده از داده‌های مشتریان برای گرفتن تصمیمات تجاری بهتر است. اهداف اصلی آن عبارتند از:

  • شناخت بهتر مشتریان: چه کسانی هستند؟ از کجا می‌آیند؟
  • تحلیل رفتار خرید: چه محصولاتی را، چه زمانی و چگونه می‌خرند؟
  • بخش‌بندی مشتریان (Segmentation): گروه‌بندی مشتریان مشابه برای بازاریابی هدفمند.
  • افزایش وفاداری و کاهش ریزش مشتری (Churn): شناسایی مشتریان وفادار و مشتریان در معرض خطر.

مراحل اصلی تحلیل با پانداس

فرآیند تحلیل معمولاً شامل این ۵ مرحله است:

  1. بارگذاری و کاوش اولیه داده‌ها
  2. پاک‌سازی و آماده‌سازی داده‌ها
  3. مهندسی ویژگی (Feature Engineering)
  4. تحلیل و استخراج بینش (Insight Extraction)
  5. مصورسازی نتایج

مثال عملی: تحلیل داده‌های یک فروشگاه آنلاین

فرض کنید یک مجموعه داده از تراکنش‌های یک فروشگاه آنلاین داریم. ستون‌های این داده‌ها معمولاً به شکل زیر است:
InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountry

مرحله ۱: بارگذاری و کاوش اولیه داده‌ها

ابتدا کتابخانه‌های لازم را وارد کرده و داده‌ها را بارگذاری می‌کنیم.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# بارگذاری داده‌ها (فرض می‌کنیم فایل در کنار اسکریپت ماست)
# در یک پروژه واقعی، ممکن است مسیر فایل متفاوت باشد
# df = pd.read_csv('ecommerce_data.csv', encoding='ISO-8859-1')
# برای این مثال، یک دیتافریم نمونه می‌سازیم:
data = {
    'InvoiceNo': ['536365', '536365', '536366', '536367', '536368', '536369', None, '536370'],
    'StockCode': ['85123A', '71053', '84406B', '84879', '22728', '21756', '22633', '22726'],
    'Description': ['Product A', 'Product B', 'Product C', 'Product D', 'Product E', 'Product F', 'Product G', 'Product H'],
    'Quantity': [6, 6, 8, 2, 3, 1, -1, 3], # شامل مقادیر منفی (مرجوعی)
    'InvoiceDate': ['12/1/2010 8:26', '12/1/2010 8:26', '12/1/2010 8:28', '12/1/2010 8:34', '12/1/2010 8:34', '12/1/2010 8:35', '12/1/2010 9:00', '12/1/2010 9:02'],
    'UnitPrice': [2.55, 3.39, 1.85, 7.65, 4.25, 5.95, 1.85, 4.25],
    'CustomerID': [17850.0, 17850.0, 17850.0, 13047.0, 13047.0, 14688.0, 14688.0, 15311.0],
    'Country': ['United Kingdom', 'United Kingdom', 'United Kingdom', 'France', 'France', 'United Kingdom', 'United Kingdom', 'Germany']
}
df = pd.DataFrame(data)


# نمایش ۵ سطر اول دیتافریم
print("نمایش اولیه داده‌ها:")
print(df.head())

# مشاهده اطلاعات کلی دیتافریم (نوع ستون‌ها و مقادیر غیرخالی)
print("\nاطلاعات کلی دیتافریم:")
df.info()

# مشاهده آمار توصیفی برای ستون‌های عددی
print("\nآمار توصیفی:")
print(df.describe())

بینش اولیه:

  • ستون CustomerID مقادیر خالی (Null) دارد.
  • ستون Quantity مقادیر منفی دارد که احتمالاً به معنای کالاهای مرجوعی است.
  • ستون InvoiceDate از نوع object (رشته) است و باید به نوع تاریخ تبدیل شود.

مرحله ۲: پاک‌سازی و آماده‌سازی داده‌ها

این مرحله بسیار حیاتی است.

# 1. حذف سطرهایی که CustomerID ندارند (چون تحلیل ما بر اساس مشتری است)
df.dropna(subset=['CustomerID'], inplace=True)

# 2. حذف فاکتورهای مرجوعی (که تعداد منفی دارند)
df = df[df['Quantity'] > 0]

# 3. تبدیل ستون تاریخ به فرمت datetime
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])

# 4. تبدیل نوع CustomerID به عدد صحیح
df['CustomerID'] = df['CustomerID'].astype(int)

print("\nاطلاعات دیتافریم پس از پاک‌سازی:")
df.info()

مرحله ۳: مهندسی ویژگی (Feature Engineering)

ویژگی‌های جدیدی می‌سازیم که برای تحلیل مفید هستند.

# ساخت ستون قیمت کل (TotalPrice)
df['TotalPrice'] = df['Quantity'] * df['UnitPrice']

# استخراج ماه و سال از تاریخ خرید
df['InvoiceMonth'] = df['InvoiceDate'].dt.to_period('M')

print("\nدیتافریم با ویژگی‌های جدید:")
print(df.head())

مرحله ۴: تحلیل و استخراج بینش

حالا می‌توانیم به سوالات کلیدی کسب‌وکار پاسخ دهیم.

سوال ۱: کدام کشورها بیشترین مشتری را دارند؟

customer_by_country = df.groupby('Country')['CustomerID'].nunique().sort_values(ascending=False)
print("\nتعداد مشتریان یکتا بر اساس کشور:")
print(customer_by_country.head())

سوال ۲: فروش ماهانه شرکت چگونه بوده است؟

monthly_revenue = df.groupby('InvoiceMonth')['TotalPrice'].sum()
print("\nفروش کل ماهانه:")
print(monthly_revenue)

سوال ۳: مشتریان برتر ما (بر اساس مجموع خرید) چه کسانی هستند؟

top_customers = df.groupby('CustomerID')['TotalPrice'].sum().sort_values(ascending=False)
print("\n۱۰ مشتری برتر بر اساس مجموع خرید:")
print(top_customers.head(10))

تحلیل پیشرفته‌تر: بخش‌بندی مشتریان با مدل RFM

RFM یک مدل کلاسیک و بسیار مؤثر برای بخش‌بندی مشتریان است:

  • Recency (تازگی): آخرین باری که مشتری خرید کرده چقدر گذشته است؟ (هرچه کمتر، بهتر)
  • Frequency (تکرار): مشتری چند بار خرید کرده است؟ (هرچه بیشتر، بهتر)
  • Monetary (ارزش مالی): مشتری در مجموع چقدر هزینه کرده است؟ (هرچه بیشتر، بهتر)
# برای محاسبه Recency، به یک تاریخ مرجع نیاز داریم (مثلاً یک روز بعد از آخرین تاریخ در دیتاست)
snapshot_date = df['InvoiceDate'].max() + pd.Timedelta(days=1)

# تجمیع داده‌ها در سطح مشتری
rfm_data = df.groupby('CustomerID').agg({
    'InvoiceDate': lambda date: (snapshot_date - date.max()).days, # Recency
    'InvoiceNo': 'nunique', # Frequency (تعداد فاکتورهای یکتا)
    'TotalPrice': 'sum' # Monetary
})

# تغییر نام ستون‌ها
rfm_data.rename(columns={'InvoiceDate': 'Recency',
                         'InvoiceNo': 'Frequency',
                         'TotalPrice': 'MonetaryValue'}, inplace=True)

print("\nدیتافریم RFM:")
print(rfm_data.head())

حالا می‌توانیم بر اساس این مقادیر، مشتریان را به بخش‌های مختلفی مانند “مشتریان وفادار”، “مشتریان در معرض خطر” و “مشتریان جدید” تقسیم کنیم (این کار معمولاً با استفاده از کوانتایل‌ها انجام می‌شود).

مرحله ۵: مصورسازی نتایج

تصویرسازی به درک بهتر نتایج کمک می‌کند.

# تنظیمات ظاهری نمودارها
sns.set(style="whitegrid")

# نمودار تعداد مشتریان بر اساس کشور
plt.figure(figsize=(12, 6))
customer_by_country.head(10).plot(kind='bar', color='skyblue')
plt.title('تعداد مشتریان یکتا در ۱۰ کشور برتر')
plt.xlabel('کشور')
plt.ylabel('تعداد مشتریان')
plt.xticks(rotation=45)
plt.show()

# نمودار فروش ماهانه
plt.figure(figsize=(12, 6))
monthly_revenue.plot(kind='line', marker='o')
plt.title('روند فروش ماهانه')
plt.xlabel('ماه')
plt.ylabel('مجموع فروش')
plt.grid(True)
plt.show()

جمع‌بندی

با استفاده از کتابخانه Pandas، شما می‌توانید:

  1. داده‌های خام مشتریان را به سادگی بارگذاری و بررسی کنید.
  2. مشکلات رایج داده مانند مقادیر خالی و فرمت‌های نادرست را پاک‌سازی کنید.
  3. با مهندسی ویژگی، اطلاعات جدید و ارزشمندی مانند TotalPrice ایجاد کنید.
  4. با استفاده از توابع قدرتمند مانند groupby و agg، تحلیل‌های عمیقی مانند محاسبه مشتریان برتر یا مدل RFM را پیاده‌سازی کنید.
  5. نتایج خود را برای ارائه به مدیران و ذی‌نفعان به صورت نمودارهای گویا به تصویر بکشید.

این فرآیند اساس بسیاری از پروژه‌های پیشرفته‌تر مانند پیش‌بینی ریزش مشتری (Churn Prediction) و سیستم‌های پیشنهاددهنده (Recommendation Systems) است.

5/5 ( 1 امتیاز )
نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا