تحلیل دادههای مشتریان چیست؟
این فرآیند شامل استفاده از دادههای مشتریان برای گرفتن تصمیمات تجاری بهتر است. اهداف اصلی آن عبارتند از:
- شناخت بهتر مشتریان: چه کسانی هستند؟ از کجا میآیند؟
- تحلیل رفتار خرید: چه محصولاتی را، چه زمانی و چگونه میخرند؟
- بخشبندی مشتریان (Segmentation): گروهبندی مشتریان مشابه برای بازاریابی هدفمند.
- افزایش وفاداری و کاهش ریزش مشتری (Churn): شناسایی مشتریان وفادار و مشتریان در معرض خطر.
مراحل اصلی تحلیل با پانداس
فرآیند تحلیل معمولاً شامل این ۵ مرحله است:
- بارگذاری و کاوش اولیه دادهها
- پاکسازی و آمادهسازی دادهها
- مهندسی ویژگی (Feature Engineering)
- تحلیل و استخراج بینش (Insight Extraction)
- مصورسازی نتایج
مثال عملی: تحلیل دادههای یک فروشگاه آنلاین
فرض کنید یک مجموعه داده از تراکنشهای یک فروشگاه آنلاین داریم. ستونهای این دادهها معمولاً به شکل زیر است:
InvoiceNo, StockCode, Description, Quantity, InvoiceDate, UnitPrice, CustomerID, Country
مرحله ۱: بارگذاری و کاوش اولیه دادهها
ابتدا کتابخانههای لازم را وارد کرده و دادهها را بارگذاری میکنیم.
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، شما میتوانید:
- دادههای خام مشتریان را به سادگی بارگذاری و بررسی کنید.
- مشکلات رایج داده مانند مقادیر خالی و فرمتهای نادرست را پاکسازی کنید.
- با مهندسی ویژگی، اطلاعات جدید و ارزشمندی مانند
TotalPriceایجاد کنید. - با استفاده از توابع قدرتمند مانند
groupbyوagg، تحلیلهای عمیقی مانند محاسبه مشتریان برتر یا مدل RFM را پیادهسازی کنید. - نتایج خود را برای ارائه به مدیران و ذینفعان به صورت نمودارهای گویا به تصویر بکشید.
این فرآیند اساس بسیاری از پروژههای پیشرفتهتر مانند پیشبینی ریزش مشتری (Churn Prediction) و سیستمهای پیشنهاددهنده (Recommendation Systems) است.




