علوم داده - Data Science

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

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

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

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

  • 🧑‍🤝‍🧑 شناخت بهتر مشتریان:
    چه کسانی هستند؟ از کجا می‌آیند؟

  • 🛒 تحلیل رفتار خرید:
    چه محصولاتی را، چه زمانی و چگونه می‌خرند؟

  • 🗂️ بخش‌بندی مشتریان (Segmentation):
    گروه‌بندی مشتریان مشابه برای بازاریابی هدفمند.

  • ❤️ افزایش وفاداری و کاهش ریزش مشتری (Churn):
    شناسایی مشتریان وفادار و مشتریان در معرض خطر.


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

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

  1. 🟢 بارگذاری و کاوش اولیه داده‌ها

  2. 🟡 پاک‌سازی و آماده‌سازی داده‌ها

  3. 🟠 مهندسی ویژگی (Feature Engineering)

  4. 🔵 تحلیل و استخراج بینش (Insight Extraction)

  5. 🟣 مصورسازی نتایج


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

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

text
InvoiceNo, StockCode, Description, Quantity, InvoiceDate, UnitPrice, CustomerID, Country

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

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

python
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 (رشته) است و باید به نوع تاریخ تبدیل شود.


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

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

python
# 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ⏱️ Recency (تازگی):
    آخرین باری که مشتری خرید کرده چقدر گذشته است؟ (هرچه کمتر، بهتر)

  • 🔁 Frequency (تکرار):
    مشتری چند بار خرید کرده است؟ (هرچه بیشتر، بهتر)

  • 💰 Monetary (ارزش مالی):
    مشتری در مجموع چقدر هزینه کرده است؟ (هرچه بیشتر، بهتر)

python
# برای محاسبه 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())

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


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

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

python
# تنظیمات ظاهری نمودارها
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، شما می‌توانید:

  • 📥 داده‌های خام مشتریان را به سادگی بارگذاری و بررسی کنید.

  • 🧹 مشکلات رایج داده مانند مقادیر خالی و فرمت‌های نادرست را پاک‌سازی کنید.

  • 🛠️ با مهندسی ویژگی، اطلاعات جدید و ارزشمندی مانند TotalPrice ایجاد کنید.

  • 📊 با استفاده از توابع قدرتمند مانند groupby و agg، تحلیل‌های عمیقی مانند محاسبه مشتریان برتر یا مدل RFM را پیاده‌سازی کنید.

  • 📈 نتایج خود را برای ارائه به مدیران و ذی‌نفعان به صورت نمودارهای گویا به تصویر بکشید.

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

نمایش بیشتر

هادی محمدیان

هادی محمدیان | متخصص پایگاه داده، تحلیل داده و فرآیندهای سازمانی با تجربه عملی در طراحی و بهینه‌سازی زیرساخت‌های داده. در hadimohammadian.ir مفاهیم کاربردی مدیریت پایگاه داده، تحلیل داده، SQL، Python و اصول مهندسی داده را همراه با نگاه فرآیندمحور به زبان فارسی آموزش می‌دهم. هدف من پیوند دادن دانش فنی داده با نیازهای واقعی کسب‌وکار و کمک به سازمان‌ها برای تصمیم‌گیری داده‌محور است.

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

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

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