
- सेल्स में डेटा साइंस उपयोग केस: ग्राहक सेंटिमेंट का विश्लेषण
- डेटासेट की तैयारी
- BOW विधि लागू करना
- सेंटिमेंट का पूर्वानुमान लगाने के लिए सुपरवाइज़्ड मशीन लर्निंग मॉडल का उपयोग
- निष्कर्ष
डेटा साइंस के उपयोग केस लगभग हर उस उद्योग से जुड़े हो सकते हैं जहाँ बड़ी मात्रा में डेटा इकट्ठा होता है या किया जा सकता है। स्टोर और ई-कॉमर्स वेबसाइटें वे स्थान हैं जहाँ मार्केटिंग अभियानों से आकर्षित लोगों का वास्तविक ग्राहक अनुभव होता है, और जहाँ किसी विशेष ब्रांड या कंपनी के मूल्यवान ख़रीदारी संबंधी डेटा एकत्र किए जाते हैं। यहाँ लोग यह अंतिम निर्णय लेते हैं कि क्या वे वास्तव में कोई उत्पाद खरीदना चाहते हैं, क्या वे कुछ और खरीदने में रुचि रखते हैं जिसकी योजना पहले नहीं थी, वे कितना भुगतान करने को तैयार हैं, क्या वे इस स्टोर पर वापस आएँगे, और अपने ग्राहक अनुभव के बारे में वे कैसी समीक्षा देंगे।
वास्तव में, ग्राहक समीक्षाएँ पूरे सेल्स प्रोसेस में क्या बदला या मज़बूत किया जा सकता है, यह समझने के लिए डेटा का ठोस स्रोत हैं। इस तरह डेटा का विश्लेषण करने से लागत घटाने, परिचालन दक्षता बढ़ाने, ग्राहक अनुभव सुधारने, नए अवसर खोजने, व्यवसाय बढ़ाने और अंततः राजस्व बढ़ाने में मदद मिलती है। आइए देखते हैं कि इस बहुमूल्य जानकारी का डेटा साइंस एल्गोरिद्म से विश्लेषण और मॉडलिंग कैसे की जा सकती है, ताकि छिपी हुई इनसाइट्स मिलें और हर एक ग्राहक का समग्र संदेश पकड़ा जा सके।
सेल्स में डेटा साइंस उपयोग केस: ग्राहक सेंटिमेंट का विश्लेषण
ग्राहक सेंटिमेंट विश्लेषण एक स्वचालित प्रक्रिया है जो यह पहचानती है कि किसी कंपनी की सेवाओं या उत्पादों का उपयोग करते समय ग्राहक किन भावनाओं का अनुभव करते हैं। यह आमतौर पर असंरचित पाठ्य डेटा होता है जो ऑनलाइन सर्वेक्षणों, सोशल मीडिया, सपोर्ट टिकट, फीडबैक फ़ॉर्म, प्रोडक्ट रिव्यू, फ़ोरम, फ़ोन कॉल, ईमेल और चैटबॉट से एकत्र किया जाता है। मशीन लर्निंग में, ग्राहक सेंटिमेंट विश्लेषण नैचुरल लैंग्वेज प्रोसेसिंग (NLP) के माध्यम से किया जाता है, जो सांख्यिकीय और भाषायी तरीकों को लागू कर सीधे पाठ्य डेटा से सकारात्मक, नकारात्मक और तटस्थ सेंटिमेंट निकालता है। मूलतः, यह दो पैरामीटर देता है:
- पोलैरिटी: दर्शाता है कि सेंटिमेंट सकारात्मक है या नकारात्मक।
- मैग्नीट्यूड: उस सेंटिमेंट की तीव्रता दर्शाता है।
ग्राहक सेंटिमेंट विश्लेषण किसी भी आधुनिक व्यवसाय के लिए एक प्रमुख उपकरण है, क्योंकि यह क्रियाशील इनसाइट्स प्राप्त करने, उन महत्वपूर्ण आवर्ती समस्याओं को पहचानने और ठीक करने में मदद करता है जो ग्राहकों को असंतुष्ट करती हैं, उन उत्पाद या सेवा विशेषताओं को मज़बूत करता है जो ग्राहकों की सकारात्मक भावनाओं का कारण बनती हैं, और समग्र रूप से अधिक कुशल डेटा-आधारित निर्णय लेने में सहायक होता है। और अधिक सूक्ष्म स्तर पर, ग्राहक सेंटिमेंट विश्लेषण हमें यह करने देता है:
- ग्राहक सेवा और इस प्रकार ग्राहक अनुभव में सुधार,
- ग्राहक निष्ठा बढ़ाना,
- चर्न रेट घटाना,
- उत्पादों और सेवाओं को समय पर अपग्रेड करना,
- मार्केटिंग अभियानों का अनुकूलन,
- नए रुझानों और बाज़ारों का अनुमान लगाना,
- हमारी कंपनी की उच्च साख बनाए रखना,
- लाभ बढ़ाना।
किसी भी टेक्स्ट विश्लेषण कार्य की तरह, ग्राहक सेंटिमेंट विश्लेषण करते समय कुछ चुनौतियाँ आ सकती हैं। उदाहरण के लिए, कुछ समीक्षाओं में NLP एल्गोरिद्म तंज या व्यंग्य नहीं पकड़ पाता और उन्हें गलत वर्गीकृत कर देता है। यह कभी-कभी बहुत विशिष्ट संक्षेपों या कम इस्तेमाल होने वाले स्लैंग शब्दों को समझने में भी असफल हो सकता है।
डेटासेट की तैयारी
आइए IMDB मूवी रिव्यू के डेटासेट का उपयोग करके देखते हैं कि व्यवहार में ग्राहक सेंटिमेंट विश्लेषण कैसे काम करता है:
import pandas as pd
movies = pd.read_csv('movies.csv', index_col=0).reset_index(drop=True)
print(f'Number of reviews: {movies.shape[0]:,}\n')
print(movies.head())
Number of reviews: 7,501
review label
0 This short spoof can be found on Elite's Mille... 0
1 A singularly unfunny musical comedy that artif... 0
2 An excellent series, masterfully acted and dir... 1
3 The master of movie spectacle Cecil B. De Mill... 1
4 I was gifted with this movie as it had such a ... 0
हमारे पास दो कॉलम हैं: एक में प्रत्येक समीक्षा का पाठ है, और दूसरे में समग्र सेंटिमेंट का अनुमान: सकारात्मक (1) या नकारात्मक (0)।
आइए सकारात्मक और नकारात्मक समीक्षाओं का प्रतिशत निकालें:
round(movies['label'].value_counts()*100/len(movies['label'])).convert_dtypes()
0 50
1 50
Name: label, dtype: Int64
अतः, हमारे पास सकारात्मक और नकारात्मक समीक्षाओं के लगभग समान अनुपात हैं।
BOW विधि लागू करना
अगला कदम टेक्स्ट डेटा को संख्यात्मक रूप में बदलना होगा, क्योंकि मशीन लर्निंग मॉडल केवल संख्यात्मक फीचर्स के साथ काम कर सकता है। विशेष रूप से, हम ऐसे फीचर्स बनाएँगे जो बताएँगे कि संबंधित समीक्षा में प्रत्येक शब्द कितनी बार आता है। इस उद्देश्य के लिए सबसे बुनियादी और सीधी पद्धति बैग-ऑफ़-वर्ड्स (BOW) कहलाती है, जो दस्तावेज़ में आने वाले सभी शब्दों की एक शब्दावली बनाती है और प्रत्येक समीक्षा में प्रत्येक शब्द की आवृत्ति गिनती है। परिणामस्वरूप, हमें प्रत्येक शब्द के लिए एक नया फीचर मिलेगा, जिसमें संबंधित आवृत्तियाँ होंगी।
आइए अपने डेटासेट पर BOW विधि लागू करें:
from sklearn.feature_extraction.text import CountVectorizer
# Creating new features
vect = CountVectorizer(max_features=200)
vect.fit(movies.review)
X_review = vect.transform(movies.review)
X_df = pd.DataFrame(X_review.toarray(), columns=vect.get_feature_names())
# Combining the new features with the label
movies_bow = pd.concat([movies['label'], X_df], axis=1)
print(movies_bow.head())
label 10 about acting action actors actually after again all ... \
0 0 0 0 0 0 0 0 0 0 0 ...
1 0 1 0 1 0 1 0 0 0 3 ...
2 1 0 0 0 0 0 0 1 0 0 ...
3 1 0 0 0 1 0 0 0 0 0 ...
4 0 1 0 0 1 0 0 0 0 3 ...
will with without work world would years you young your
0 0 1 0 0 0 1 0 0 0 0
1 2 7 1 0 0 2 0 3 0 2
2 0 2 0 0 0 0 0 0 1 0
3 0 0 0 0 0 0 0 1 1 0
4 0 2 0 1 0 0 0 0 0 0
[5 rows x 201 columns]
ऊपर, हमने एक वैकल्पिक पैरामीटर max_features लागू किया है ताकि केवल सबसे अधिक बार उपयोग किए गए 200 शब्दों पर विचार किया जाए और संभावित मॉडल ओवरफ़िटिंग से बचा जा सके।
सेंटिमेंट का पूर्वानुमान लगाने के लिए सुपरवाइज़्ड मशीन लर्निंग मॉडल का उपयोग
अब, हम सेंटिमेंट का पूर्वानुमान लगाने के लिए एक सुपरवाइज़्ड मशीन लर्निंग मॉडल का उपयोग करेंगे। क्योंकि हम यह आँकना चाहते हैं कि नई समीक्षा का सेंटिमेंट, पहले से लेबल की गई समीक्षाओं के आधार पर, सकारात्मक या नकारात्मक श्रेणी में आता है या नहीं, हमें फिर से एक क्लासिफिकेशन समस्या से निपटना है। एक बार फिर, आइए लॉजिस्टिक रिग्रेशन एल्गोरिद्म का उपयोग करें और मॉडल की सटीकता मापें:
Accuracy score: 0.754
Confusion matrix:
[[37.62772101 13.23856064]
[11.32829853 37.80541981]]
हम देखते हैं कि मॉडल ने सभी सकारात्मक समीक्षाओं में से 11% को नकारात्मक लेबल कर दिया, और 13% को सकारात्मक, जबकि वे नकारात्मक थीं। मॉडल की सटीकता बढ़ाने के संभावित तरीक़ों में, हम स्टॉपवर्ड्स को हटाने पर विचार कर सकते हैं (अर्थात वे कम-सूचनात्मक शब्द जो बहुत अधिक बार आते हैं, जैसे "about", "will", "you" आदि) और शब्दावली का आकार बढ़ा सकते हैं।
जब हम BOW विधि लागू करते हैं, तो हमारे डेटा फ़्रेम में सैकड़ों या हज़ारों नए फीचर्स हो सकते हैं। इससे मॉडल अत्यधिक जटिल हो सकता है: ओवरफ़िटेड, और बहुत से अनावश्यक फीचर्स व पैरामीटरों के साथ। इसे ठीक करने का एक तरीका रेग्युलराइज़ेशन है, जो मॉडल के फ़ंक्शन पर प्रतिबंध लगाता है। यहाँ ट्यून करने वाला पैरामीटर C है, जो रेग्युलराइज़ेशन की शक्ति को दर्शाता है। आइए इस पैरामीटर के 2 मानों: 100 और 0.1 का परीक्षण करें और देखें कि टेस्ट डेटा पर कौन सा हमें बेहतर प्रदर्शन देता है:
lr_1 = LogisticRegression(C=100)
lr_1.fit(X_train, y_train)
predictions_1 = lr_1.predict(X_test)
lr_2 = LogisticRegression(C=0.1)
lr_2.fit(X_train, y_train)
predictions_2 = lr_2.predict(X_test)
print(f'Accuracy score, lr_1 model: {round(accuracy_score(y_test, predictions_1), 3)}\n'
f'Accuracy score, lr_2 model: {round(accuracy_score(y_test, predictions_2), 3)}\n\n'
f'Confusion matrix for lr_1 model, %:\n{confusion_matrix(y_test, predictions_1)/len(y_test)*100}\n\n'
f'Confusion matrix for lr_2 model, %:\n{confusion_matrix(y_test, predictions_2)/len(y_test)*100}')
Accuracy score, lr_1 model: 0.753
Accuracy score, lr_2 model: 0.756
Confusion matrix for lr_1 model, %:
[[37.53887161 13.32741004]
[11.32829853 37.80541981]]
Confusion matrix for lr_2 model, %:
[[37.67214571 13.19413594]
[11.19502443 37.93869391]]
पैरामीटर C के चुने गए मानों का उपयोग करने पर मॉडल की सटीकता में अंतर नगण्य है। संभवतः, हम इस पैरामीटर के और मानों के साथ प्रयोग करके ऐसा मान पा सकते हैं जो प्रदर्शन को और सुधारे। हालाँकि, यहाँ हमारे पास केवल 200 नए फीचर्स हैं, इसलिए हमारा मॉडल उतना जटिल नहीं है और इस मामले में रेग्युलराइज़ेशन चरण वास्तव में आवश्यक नहीं है।
predict फ़ंक्शन से 0 या 1 लेबल का पूर्वानुमान लगाने के बजाय, predict_proba का उपयोग कर सेंटिमेंट की प्रायिकता का पूर्वानुमान लगाना संभव है। यहाँ ध्यान रखना होगा कि हम सटीकता स्कोर या कन्फ्यूज़न मैट्रिक्स को सीधे प्रेडिक्ट की गई प्रायिकताओं पर लागू नहीं कर सकते, क्योंकि ये मेट्रिक्स केवल क्लास पर काम करती हैं। इसलिए, हमें उन्हें आगे क्लास के रूप में एनकोड करना होगा। डिफ़ॉल्ट रूप से, 0.5 या उससे अधिक प्रायिकता को क्लास 1 में, अन्यथा क्लास 0 में बदला जाता है।
lr = LogisticRegression()
lr.fit(X_train, y_train)
# Predicting the probability of the 0 class
predictions_prob_0 = lr.predict_proba(X_test)[:, 0]
# Predicting the probability of the 1 class
predictions_prob_1 = lr.predict_proba(X_test)[:, 1]
print(f'First 10 predicted probabilities of class 0: {predictions_prob_0[:10].round(3)}\n'
f'First 10 predicted probabilities of class 1: {predictions_prob_1[:10].round(3)}')
First 10 predicted probabilities of class 0: [0.246 0.143 0.123 0.708 0.001 0.828 0.204 0.531 0.121 0.515]
First 10 predicted probabilities of class 1: [0.754 0.857 0.877 0.292 0.999 0.172 0.796 0.469 0.879 0.485]
निष्कर्ष
और अधिक सूक्ष्म सेंटिमेंट विश्लेषण करने के लिए हम अपने डेटासेट पर कई अन्य सहायक तरीकों को लागू कर सकते हैं:
- संदर्भ बनाए रखने के लिए केवल एकल शब्दों के बजाय n-ग्राम (शब्दों के संयोजन) का उपयोग,
- स्टॉपवर्ड्स को हटाना,
- ऊपरी या निचली आवृत्ति मूल्यों के आधार पर शब्दावली के आकार को सीमित करना,
- प्रत्येक समीक्षा की लंबाई या विराम चिह्नों की संख्या का वर्णन करने वाले अतिरिक्त संख्यात्मक फीचर्स बनाना (दूसरा कभी-कभी सेंटिमेंट की तीव्रता से सहसंबद्ध होता है),
- संख्याओं, कुछ अक्षरों, किसी निश्चित लंबाई के शब्दों को निकालना, या अधिक जटिल शब्द पैटर्न पर विचार करना,
- स्टेमिंग और लेमाटाइज़ेशन लागू करना, अर्थात शब्दों को उनकी जड़ों तक घटाना,
- BOW के बजाय शब्दावली बनाने के लिए अधिक परिष्कृत तरीकों का उपयोग, जैसे TfIdf (टर्म फ़्रीक्वेंसी इनवर्स डॉक्यूमेंट फ़्रीक्वेंसी), जो इस बात का ध्यान रखता है कि किसी समीक्षा में कोई शब्द बाकी समीक्षाओं की तुलना में कितनी बार आता है।
- सेंटिमेंट विश्लेषण के लिए डिज़ाइन की गई कुछ विशेष लाइब्रेरी का उपयोग, जैसे TextBlob, SentiWordNet, VADER (Valence Aware Dictionary and Sentiment Reasoner)।
यदि आप सूचनाप्रद सेंटिमेंट विश्लेषण के लिए इन और अन्य उपयोगी तकनीकों का पता लगाना चाहते हैं, तो कोर्स Sentiment Analysis in Python देखें।