मुख्य सामग्री पर जाएं

Python में Customer Segmentation का परिचय

इस ट्यूटोरियल में, आप Python में शून्य से RFM (Recency, Frequency, Monetary) विश्लेषण का उपयोग करके ग्राहक विभाजन को लागू करना सीखेंगे।
अपडेट किया गया 25 सित॰ 2026  · 8 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

रिटेल सेक्टर में, हाइपरमार्केट की विभिन्न चेन अपार मात्रा में डेटा उत्पन्न कर रही हैं। यह डेटा स्टोर्स में रोज़ाना उत्पन्न होता है। ग्राहकों के इस विस्तृत ट्रांज़ैक्शन डेटाबेस का विश्लेषण लाभदायक रणनीतियाँ बनाने के लिए आवश्यक है।

सभी ग्राहकों की ज़रूरतें अलग-अलग होती हैं। ग्राहक आधार और लेनदेन बढ़ने के साथ, प्रत्येक ग्राहक की आवश्यकता को समझना आसान नहीं रहता। संभावित ग्राहकों की पहचान करने से मार्केटिंग अभियान बेहतर हो सकता है, जिससे अंततः बिक्री बढ़ती है। विभाजन इन ग्राहकों को विभिन्न खंडों में समूहित करने में बेहतर भूमिका निभा सकता है।

Customer Segmentation क्या है?

ग्राहक विभाजन एक विधि है जिसमें ग्राहकों को सामान्य विशेषताओं के आधार पर समूहों या क्लस्टर्स में बाँटा जाता है। मार्केट रिसर्चर B2C मॉडल में ग्राहकों को विभिन्न जनसांख्यिकीय विशेषताओं जैसे व्यवसाय, लिंग, आयु, स्थान, और वैवाहिक स्थिति के आधार पर विभाजित कर सकते हैं। मनोवैज्ञानिक विशेषताएँ जैसे सामाजिक वर्ग, जीवनशैली और व्यक्तित्व गुण, तथा व्यवहारगत विशेषताएँ जैसे खर्च करने की आदतें, उपभोग पैटर्न, उत्पाद/सेवा का उपयोग, और पहले खरीदे गए उत्पाद। B2B मॉडल में, कंपनी के आकार, उद्योग के प्रकार, और स्थान जैसी कंपनी-स्तरीय विशेषताओं का उपयोग किया जाता है।

चार्ट

Customer Segmentation की आवश्यकता

  • यह सबसे संभावित ग्राहकों की पहचान करने में मदद करेगा।
  • यह प्रबंधकों को लक्षित दर्शक समूह के साथ आसानी से संवाद करने में सहायता करेगा।
  • लक्षित सेगमेंट से संवाद करने के लिए सर्वश्रेष्ठ माध्यम चुनने में भी मदद करेगा।
  • सेवा की गुणवत्ता, निष्ठा और प्रतिधारण में सुधार करता है।
  • सेगमेंट की आवश्यकताओं को बेहतर समझकर ग्राहक संबंधों में सुधार करता है।
  • अपसेलिंग और क्रॉस-सेलिंग के अवसर प्रदान करता है।
  • लक्षित ग्राहकों के लिए विशेष ऑफ़र डिज़ाइन करने में प्रबंधकों की मदद करता है, ताकि वे अधिक उत्पाद खरीदने के लिए प्रोत्साहित हों।
  • कंपनियों को प्रतिस्पर्धियों से एक कदम आगे रहने में मदद करता है।
  • ऐसे नए उत्पादों की पहचान करने में मदद करता है जिनमें ग्राहक रुचि ले सकते हैं।

Segmentation के प्रकार

विभाजन के प्रकार

RFM विश्लेषण का उपयोग करके Customer Segmentation

RFM (Recency, Frequency, Monetary) विश्लेषण एक व्यवहार-आधारित तरीका है जिसमें ग्राहकों को सेगमेंट्स में समूहित किया जाता है। यह ग्राहकों को उनकी पिछली खरीद लेनदेन के आधार पर समूहित करता है—ग्राहक ने कितनी हाल में, कितनी बार, और कितनी राशि की खरीदारी की। RFM बेहतर सेवा के उद्देश्य से ग्राहकों को विभिन्न समूहों में फ़िल्टर करता है। यह प्रबंधकों को अधिक लाभदायक व्यवसाय के लिए संभावित ग्राहकों की पहचान करने में मदद करता है। कुछ ग्राहक बड़े खर्च करने वाले होते हैं, लेकिन यदि उन्होंने केवल एक बार खरीदा हो या उन्होंने हाल में कब खरीदा? क्या वे अक्सर हमारा उत्पाद खरीदते हैं? यह व्यक्तिगत सेवा के लिए प्रभावी प्रोमोशनल अभियान चलाने में भी मदद करता है।

  • Recency (R): किसने हाल में खरीदा है? अंतिम खरीद से अब तक के दिनों की संख्या (कम से कम recency बेहतर)
  • Frequency (F): कौन बार-बार खरीदता है? यानी कुल खरीद की संख्या (उच्च frequency)
  • Monetary Value (M): किसका खरीद राशि अधिक है? यानी ग्राहक द्वारा खर्च की गई कुल राशि (उच्च monetary value)

यहाँ, तीनों वेरिएबल्स (Recency, Frequency, और Monetary) में चार-चार समान समूह होते हैं, जो मिलकर 64 (4x4x4) अलग-अलग ग्राहक सेगमेंट बनाते हैं।

RFM (Recency, Frequency, Monetary) के चरण:

  1. प्रत्येक ग्राहक के लिए Recency, Frequency, Monetary मानों की गणना करें।
  2. क्वार्टाइल का उपयोग करके RFM तालिका में सेगमेंट बिन मान जोड़ें।
  3. ग्राहकों के RFM स्कोर को आरोही क्रम में सॉर्ट करें।

1. प्रत्येक ग्राहक के लिए Recency, Frequency, Monetary मानों की गणना करें।

Recency, Frequency, Monetary मान

2. क्वार्टाइल का उपयोग करके RFM तालिका में सेगमेंट बिन मान जोड़ें।

RFM तालिका पर सेगमेंट बिन मान

3. सभी स्कोर को एक ही कॉलम (RFM_Score) में जोड़ें।

सभी स्कोर एक कॉलम में

Python में RFM का उपयोग करके संभावित ग्राहक सेगमेंट पहचानें

आवश्यक लाइब्रेरी आयात करना

#import modules
import pandas as pd # for dataframes
import matplotlib.pyplot as plt # for plotting graphs
import seaborn as sns # for plotting graphs
import datetime as dt

डेटासेट लोड करना

पहले pandas की read CSV फ़ंक्शन का उपयोग करके आवश्यक HR डेटासेट लोड करते हैं। आप यह डेटा इस लिंक से डाउनलोड कर सकते हैं।

data = pd.read_excel("Online_Retail.xlsx")
data.head()
डेटासेट 1
data.tail()
डेटासेट 2
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 541909 entries, 0 to 541908
Data columns (total 8 columns):
InvoiceNo      541909 non-null object
StockCode      541909 non-null object
Description    540455 non-null object
Quantity       541909 non-null int64
InvoiceDate    541909 non-null datetime64[ns]
UnitPrice      541909 non-null float64
CustomerID     406829 non-null float64
Country        541909 non-null object
dtypes: datetime64[ns](1), float64(2), int64(1), object(4)
memory usage: 33.1+ MB
data= data[pd.notnull(data['CustomerID'])]

डुप्लिकेट हटाना

कभी-कभी आपको उलझा हुआ डेटासेट मिलता है। आपको डुप्लिकेट्स से निपटना पड़ सकता है, जो आपके विश्लेषण को बिगाड़ देंगे। python में, pandas का drop_duplicates() फ़ंक्शन दोहराए गए या डुप्लिकेट रिकॉर्ड्स को हटा देता है।

filtered_data=data[['Country','CustomerID']].drop_duplicates()

आइए डेटा इनसाइट्स में उतरते हैं

#Top ten country's customer
filtered_data.Country.value_counts()[:10].plot(kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0x7fd81725dfd0>
डेटा इनसाइट्स

दिए गए डेटासेट में, आप देख सकते हैं कि अधिकांश ग्राहक "United Kingdom" से हैं। इसलिए, आप United Kingdom के ग्राहकों के लिए डेटा फ़िल्टर कर सकते हैं।

uk_data=data[data.Country=='United Kingdom']
uk_data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 361878 entries, 0 to 541893
Data columns (total 8 columns):
InvoiceNo      361878 non-null object
StockCode      361878 non-null object
Description    361878 non-null object
Quantity       361878 non-null int64
InvoiceDate    361878 non-null datetime64[ns]
UnitPrice      361878 non-null float64
CustomerID     361878 non-null float64
Country        361878 non-null object
dtypes: datetime64[ns](1), float64(2), int64(1), object(4)
memory usage: 24.8+ MB

pandas में describe() फ़ंक्शन विभिन्न संक्षिप्त सांख्यिकी प्राप्त करने में सहायक है। यह फ़ंक्शन डेटा की गणना, औसत, मानक विचलन, न्यूनतम और अधिकतम मान, तथा क्वांटाइल्स लौटाता है।

uk_data.describe()
  Quantity UnitPrice CustomerID
count 361878.000000 361878.000000 361878.000000
mean 11.077029 3.256007 15547.871368
std 263.129266 70.654731 1594.402590
min -80995.000000 0.000000 12346.000000
25% 2.000000 1.250000 14194.000000
50% 4.000000 1.950000 15514.000000
75% 12.000000 3.750000 16931.000000
max 80995.000000 38970.000000 18287.000000

यहाँ, आप देख सकते हैं कि कुछ ग्राहकों ने नकारात्मक मात्रा में ऑर्डर किया है, जो संभव नहीं है। इसलिए, आपको Quantity को शून्य से अधिक पर फ़िल्टर करना होगा।

uk_data = uk_data[(uk_data['Quantity']>0)]
In: # Change the name of columns
rfm.columns=['monetary','frequency','recency']
uk_data.info() 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 354345 entries, 0 to 541893
Data columns (total 8 columns):
InvoiceNo      354345 non-null object
StockCode      354345 non-null object
Description    354345 non-null object
Quantity       354345 non-null int64
InvoiceDate    354345 non-null datetime64[ns]
UnitPrice      354345 non-null float64
CustomerID     354345 non-null float64
Country        354345 non-null object
dtypes: datetime64[ns](1), float64(2), int64(1), object(4)
memory usage: 24.3+ MB

आवश्यक कॉलम फ़िल्टर करें

यहाँ, आप RFM विश्लेषण के लिए आवश्यक कॉलम फ़िल्टर कर सकते हैं। आपको केवल पाँच कॉलम चाहिए: CustomerID, InvoiceDate, InvoiceNo, Quantity, और UnitPrice। CustomerID आपके ग्राहकों को अद्वितीय रूप से परिभाषित करेगा, InvoiceDate आपको खरीद की हालियत (recency) गणना में मदद करेगा, InvoiceNo लेनदेन की संख्या (frequency) गिनने में मदद करेगा। प्रत्येक लेनदेन में खरीदी गई Quantity और ग्राहक द्वारा खरीदे गए प्रत्येक यूनिट का UnitPrice कुल खरीदी गई राशि की गणना में मदद करेगा।

uk_data=uk_data[['CustomerID','InvoiceDate','InvoiceNo','Quantity','UnitPrice']]
uk_data['TotalPrice'] = uk_data['Quantity'] * uk_data['UnitPrice']
uk_data['InvoiceDate'].min(),uk_data['InvoiceDate'].max()
(Timestamp('2010-12-01 08:26:00'), Timestamp('2011-12-09 12:49:00'))
PRESENT = dt.datetime(2011,12,10)
uk_data['InvoiceDate'] = pd.to_datetime(uk_data['InvoiceDate'])
uk_data.head()
  CustomerID InvoiceDate InvoiceNo Quantity UnitPrice TotalPrice
0 17850.0 2010-12-01 08:26:00 536365 6 2.55 15.30
1 17850.0 2010-12-01 08:26:00 536365 6 3.39 20.34
2 17850.0 2010-12-01 08:26:00 536365 8 2.75 22.00
3 17850.0 2010-12-01 08:26:00 536365 6 3.39 20.34
4 17850.0 2010-12-01 08:26:00 536365 6 3.39 20.34

RFM विश्लेषण

यहाँ, आप निम्नलिखित क्रियाएँ करेंगे:

  • Recency के लिए: वर्तमान तिथि और प्रत्येक ग्राहक की अंतिम खरीद तिथि के बीच दिनों की संख्या की गणना करें।
  • Frequency के लिए: प्रत्येक ग्राहक के ऑर्डर्स की संख्या की गणना करें।
  • Monetary के लिए: प्रत्येक ग्राहक की कुल खरीद राशि का योग करें।
rfm= uk_data.groupby('CustomerID').agg({'InvoiceDate': lambda date: (PRESENT - date.max()).days,
                                        'InvoiceNo': lambda num: len(num),
                                        'TotalPrice': lambda price: price.sum()})
rfm.columns
Index(['InvoiceDate', 'TotalPrice', 'InvoiceNo'], dtype='object')
# Change the name of columns 
rfm.columns=['recency', 'monetary', 'frequency']
rfm['recency'] = rfm['recency'].astype(int)
rfm.head()
  monetary frequency recency
CustomerID      
12346.0 325 77183.60 1
12747.0 2 4196.01 103
12748.0 0 33719.73 4596
12749.0 3 4090.88 199
12820.0 3 942.34 59

RFM मानों के क्वांटाइल की गणना

सबसे कम recency और सबसे अधिक frequency तथा monetary राशि वाले ग्राहक शीर्ष ग्राहकों के रूप में माने जाते हैं।

qcut() क्वांटाइल-आधारित डिस्क्रीटाइज़ेशन फ़ंक्शन है। qcut नमूना क्वांटाइल्स के आधार पर डेटा को बिन्स में बाँटता है। उदाहरण के लिए, 4 क्वांटाइल्स के लिए 1000 मान प्रत्येक ग्राहक के लिए क्वांटाइल सदस्यता दर्शाने वाला एक श्रेणीबद्ध ऑब्जेक्ट बनाएंगे।

rfm['r_quartile'] = pd.qcut(rfm['recency'], 4, ['1','2','3','4'])
rfm['f_quartile'] = pd.qcut(rfm['frequency'], 4, ['4','3','2','1'])
rfm['m_quartile'] = pd.qcut(rfm['monetary'], 4, ['4','3','2','1'])
rfm.head()
  monetary frequency recency r_quartile f_quartile m_quartile
CustomerID            
12346.0 325 77183.60 1 1 1 1
12747.0 2 4196.01 103 4 1 4
12748.0 0 33719.73 4596 4 1 4
12749.0 3 4090.88 199 4 1 4
12820.0 3 942.34 59 3 2 4

RFM परिणाम की व्याख्या

सभी तीन क्वार्टाइल्स (r_quartile, f_quartile, m_quartile) को एक ही कॉलम में जोड़ें; यह रैंक आपको ग्राहकों को बेहतर तरीके से सेगमेंट करने में मदद करेगा।

rfm['RFM_Score'] = rfm.r_quartile.astype(str)+ rfm.f_quartile.astype(str) + rfm.m_quartile.astype(str)
rfm.head()
  monetary frequency recency r_quartile f_quartile m_quartile RFM_Score
CustomerID              
12346.0 325 77183.60 1 1 1 1 111
12747.0 2 4196.01 103 4 1 4 414
12748.0 0 33719.73 4596 4 1 4 414
12749.0 3 4090.88 199 4 1 4 414
12820.0 3 942.34 59 3 2 4 324
# Filter out Top/Best cusotmers
rfm[rfm['RFM_Score']=='111'].sort_values('monetary', ascending=False).head()
  monetary frequency recency r_quartile f_quartile m_quartile RFM_Score
CustomerID              
16754.0 372 2002.4 2 1 1 1 111
12346.0 325 77183.6 1 1 1 1 111
15749.0 235 44534.3 10 1 1 1 111
16698.0 226 1998.0 5 1 1 1 111
13135.0 196 3096.0 1 1 1 1 111

निष्कर्ष

बधाई हो, आप इस ट्यूटोरियल के अंत तक पहुँच गए हैं!

इस ट्यूटोरियल में, आपने Customer Segmentation के बारे में कई विवरण कवर किए। आपने सीखा कि ग्राहक विभाजन क्या है, इसकी आवश्यकता, विभाजन के प्रकार, RFM विश्लेषण, और Python में RFM का शून्य से इम्प्लीमेंटेशन। साथ ही, आपने pandas के कुछ बुनियादी कॉन्सेप्ट्स जैसे डुप्लिकेट हैंडल करना, groupby, और नमूना क्वांटाइल्स के आधार पर बिन्स बनाने के लिए qcut() भी कवर किया।

आशा है, अब आप अपने स्वयं के डेटासेट का विश्लेषण करने के लिए टॉपिक मॉडलिंग का उपयोग कर पाएंगे। इस ट्यूटोरियल को पढ़ने के लिए धन्यवाद!

यदि आप Python के बारे में और सीखना चाहते हैं, तो DataCamp का निःशुल्क Intro to Python for Data Science कोर्स करें।

विषय
Python
डेटा साइंस

Python के बारे में और जानें

{count, plural, one {कोर्स} other {कोर्स}}

Python में Data Science परिचय

{hours} घंटा
503.6K
Python से डेटा विज्ञान में उतरें और अपने डेटा का प्रभावी विश्लेषण व विज़ुअलाइज़ेशन करना सीखें। कोई कोडिंग अनुभव या कौशल की आवश्यकता नहीं।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें
और देखेंRight Arrow