شعار زيفيرنت

مشروع توقع فوز فريق IPL باستخدام التعلم الآلي

التاريخ:

تم نشر هذه المقالة كجزء من مدونة علوم البيانات.

I

تعلم آلة وعلوم البيانات من أسرع المجالات التكنولوجية نموًا. ينتج عن هذا المجال تغييرات مذهلة في المجال الطبي والإنتاج والروبوتات وما إلى ذلك. والسبب الرئيسي للتقدم في هذا المجال هو زيادة القوة الحسابية وتوافر كميات كبيرة من البيانات. في علم البيانات ، يتم تحليل هذه البيانات وجعلها مناسبة لإنشاء نماذج ومنتجات التعلم الآلي.

في مقال اليوم ، سنناقش توقعات فوز فريق IPL. استنادًا إلى بعض إحصائيات المباراة ، نتوقع الفائز في مباراة IPL. من خلال هذا المشروع ، سوف تتعرف على تحليل البيانات الاستكشافية وتقنيات هندسة الميزات التي يجب تطبيقها لمعالجة البيانات.

لذلك دعنا ننتقل إلى مجموعة البيانات.

بيانات

مجموعة البيانات التي نستخدمها هنا هي مجموعة بيانات IPL ، الذي يحتوي على التفاصيل المتعلقة بالفائز وإحصائيات المباراة. يحتوي على تفاصيل مثل الفرق التي تم لعبها ، والفائز ، ومكان المباراة ، والفوز بعدد الويكيت والتشغيل ، وقرار القذف ، سواء تم تطبيق DLS أم لا ، وأسماء الحكام وما إلى ذلك. إجراء تحليل البيانات الاستكشافية وهندسة البيانات على هذه البيانات أمر بالغ الأهمية مهم.

تطبيق

لذلك دعونا نبدأ في تنفيذ نموذج توقع فوز فريق IPL.

كالعادة ، فإن الخطوة الأولى هي استيراد جميع المكتبات المطلوبة.

استيراد الباندا كـ pd استيراد numpy مثل استيراد np seaborn كما sns sns.set_style ("whitegrid") استيراد matplotlib.pyplot كـ plt استيراد sklearn

لذلك دعونا نستورد مجموعة البيانات. لقد ناقشنا بالفعل مجموعة البيانات.

data = pd.read_csv ("match.csv")

جارٍ تحليل الصفوف الخمسة الأولى من مجموعة البيانات

data.head ()
مشروع التنبؤ باستخدام ML

دعنا نحصل على ملخص موجز لمجموعة بيانات IPL.

data.describe () وصف
مشروع التنبؤ باستخدام ML

التحقق من وجود أي قيم فارغة في مجموعة البيانات.

data.isnull (). sum ()
معرف 0 الموسم 0 المدينة 7 التاريخ 0 team1 0 team2 0 toss_winner 0 toss_decision 0 نتيجة 0 dl_applied 0 الفائز 4 win_by_runs 0 win_by_wickets 0 player_of_match 4 venue 0 umpire1 2 umpire2 2 umpire3 637

كما ترى ، فإن قيم umpire3 فارغة في جميع الصفوف تقريبًا ، لذلك نقوم بإسقاط العمود umpire3. وكذلك أسقطت بعض الصفوف التي تحتوي على القيم الخالية بعد إزالة عمود umpire3.

data = data.iloc [:،: - 1] data.dropna (inplace = True)

الآن دعنا ننظر إلى إجمالي الفرق المدرجة في مجموعة البيانات هذه.

بيانات ["فريق 1"]. فريد ()

الناتج

مجموعة (['Sunrisers Hyderabad'، 'Mumbai Indians'، 'Gujarat Lions'، 'Rising Pune Supergiant'، 'Royal Challengers Bangalore'، 'Kolkata Knight Riders'، 'Delhi Capitals'، 'Kings XI Punjab'، 'Chennai Super Kings '،' Rajasthan Royals '،' Kochi Tuskers Kerala '،' Pune Warriors '،' Rising Pune Supergiants '] ، dtype = object)

هنا يمكنك رؤية اسم Delhi Daredevils و Delhi Capitals ؛ دلهي دارديفيلز هو الاسم القديم لعواصم دلهي. وبالمثل ، فإن Decan Chargers هو الاسم القديم لـ Sunrisers Hyderabad. لذلك نحن بصدد تغيير الاسم القديم إلى الاسم الأحدث.

#for Delhi Capitals data ['team1'] = data ['team1']. str.replace ('Delhi Daredevils'، 'Delhi Capitals') data ['team2'] = data ['team2']. str.replace ( بيانات 'Delhi Daredevils'، 'Delhi Capitals') ['الفائز'] = البيانات ['الفائز']. str.replace ('Delhi Daredevils'، 'Delhi Capitals') # for sunrisers بيانات Hyderabad ['team1'] = البيانات بيانات ['team1']. str.replace ('Deccan Chargers'، 'Sunrisers Hyderabad') البيانات ['team2'] = بيانات ['team2']. str.replace ('Deccan Chargers'، 'Sunrisers Hyderabad') البيانات [ 'الفائز'] = البيانات ['الفائز']. str.replace ('Deccan Chargers'، 'Sunrisers Hyderabad')

المرئيات

عدد مباريات IPL التي فاز بها كل فريق.

plt.figure (figsize = (10,6،XNUMX)) sns.countplot (y = 'الفائز' ، البيانات = البيانات ، الترتيب = البيانات ['الفائز']. value_counts (). index) plt.xlabel ('Wins') plt .ylabel ("الفريق") plt.title ("عدد مباريات IPL التي فاز بها كل فريق")
التصورات

إجمالي عدد المباريات التي تم لعبها في ملعب مختلف

plt.figure (figsize = (10,6،10)) sns.countplot (y = 'venue'، data = data، order = data ['venue']. ​​value_counts (). iloc [: 12] .index) plt.xlabel ("عدد المباريات" ، حجم الخطوط = 12) plt.ylabel ("المكان" ، حجم الخطوط = XNUMX) plt.title ("إجمالي عدد المباريات التي تم لعبها في ملعب مختلف")
مشروع التنبؤ باستخدام ML

تم اتخاذ القرار من قبل الفريق الفائز في القرعة.

plt.figure (figsize = (10,6،12)) sns.countplot (x = "toss_decision"، data = data) plt.xlabel ('Toss Decision'، Fontize = 12) plt.ylabel ('Count'، Fontize = XNUMX ) plt.title ("قرار الإلقاء")
شريط الرسم البياني

الآن دعنا نتحقق من القيم الفريدة المقدمة في كل ميزة.

x = ["city"، "toss_decision"، "result"، "dl_applied"] لـ i in x: print ("------------") print (data [i] .unique ( )) طباعة (data [i] .value_counts ())

الناتج

------------ ["حيدر أباد" بيون "راجكوت" إندور "مومباي" كولكاتا "بنغالور" دلهي "شانديغار" كانبور "جايبور" تشيناي " كيب تاون 'بورت إليزابيث' ديربان 'سنتوريون' إيست لندن 'جوهانسبرج' كيمبرلي 'بلومفونتين' أحمد أباد 'كوتاك' ناجبور 'دارامسالا' كوتشي 'فيساخاباتنام' رايبور 'رانشي أبوظبي 'الشارقة' موهالي 'بنغالورو'] مومباي 101 كولكاتا 77 دلهي 73 حيدر أباد 64 بنغالور 63 تشيناي 57 جايبور 47 شانديغار 46 بيون 38 ديربان 15 بنغالورو 13 سنتوريون 12 أحمد أباد 12 فيساخاباتنام 12 راجكوت 10 موهالي 10 إندور 9 دارامسالا 9 جوهانسبرج 8 كوتاك 7 رانشي 7 بورت إليزابيث 7 كيب تاون 7 أبوظبي 7 الشارقة 6 رايبور 6 كوتشي 5 كانبور 4 ناجبور 3 كيمبرلي 3 إيست لندن 3 بلومفونتين 2 الاسم: المدينة ، النوع: int64 ----------- - ['field' 'bat'] الحقل 455 bat 288 الاسم: toss_decision ، dtype: int64 ------------ [تعادل 'عادي'] عادي 734 رابط 9 الاسم: نتيجة ، نوع dtype: int64 ------------ [0 1] 0 724 1 19 الاسم: dl_applied ، dtype: int64

لا نحتاج إلى جميع الميزات أو الأعمدة من أجل إنشاء النموذج. سيؤدي ذلك إلى تقليل دقة النموذج ، لذلك نقوم بإسقاط بعض الميزات التي لا تؤثر على نتائجنا.

data.drop (["id"، "Season"، "city"، "date"، "player_of_match"، 'umpire1'، "venue"، "umpire2"]، محور = 1، inplace = True)

بياناتنا تبدو مثل هذا.

بيانات IPL

يمكننا تحويل بياناتنا إلى بيانات تابعة ومستقلة.

X = data.drop (["الفائز"] ، المحور = 1) y = البيانات ["الفائز"]

توجد عدة قيم فئوية في بيانات الإدخال ، لذلك نقوم بتحويلها إلى قيم عددية باستخدام الباندا ، طريقة get_dummies.

X = pd.get_dummies (X، ["team1"، "team2"، "toss_winner"، "toss_decision"، "result"]، drop_first = True)

بيانات الإخراج هي أيضًا قيمة فئوية ، لذلك نقوم بتحويلها إلى عدد باستخدام LabelEncoder من sklearn.

من sklearn.preprocessing استيراد LabelEncoder le = LabelEncoder () y = le.fit_transform (y)

الآن دعنا نحول بياناتنا إلى مجموعة تدريب من أجل إنشاء النموذج ومجموعة الاختبار لتقييم النموذج الذي تم إنشاؤه.

من sklearn.model_selection استيراد train_test_split x_train ، x_test ، y_train ، y_test = train_test_split (X ، y ، train_size = 0.8)

إنشاء النموذج وتقييمه

الخطوة التالية والأكثر أهمية في خطوة إنشاء النموذج. لذلك نحن نستخدم التصنيف العشوائي للغابات والانحدار اللوجستي وتصنيف شجرة القرار لهذا الغرض.

من sklearn.ensemble استيراد RandomForestClassifier
النموذج = RandomForestClassifier (n_estimators = 200 ، min_samples_split = 3 ، max_features = "auto")

تدريب نموذج مصنف الغابة العشوائي

model.fit (x_train، y_train)

توقع النموذج بقيم x_test وحفظه كـ y_pred

y_pred = model.predict (x_test)

باستخدام درجة دقة sklearn ، نقوم بتقييم النتيجة المتوقعة ودقة النموذج

من sklearn.metrics import resolution_score ac = resolution_score (y_pred، y_test)
# الإخراج - 0.92

تبلغ دقة مجموعة الاختبار حوالي 92٪ وهو أمر جيد. الأمر كله يتعلق بالتنبؤ والتقييم

وفي الختام

  • I
  • تصور البيانات: قم بعمل تمثيل رسومي لمجموعة البيانات من أجل فهم الفرق والمباريات وقرار القذف لمباريات IPL
  • تقنيات المعالجة المسبقة على بيانات IPL: نفذ العديد من تقنيات هندسة الميزات لجعل مجموعة البيانات مناسبة لعمل النموذج. يتم استخدام الترميز لتحويل الميزات الفئوية إلى ميزات وتقنيات رقمية لتجنب القيم الخالية.
  • إنشاء النموذج وتقييمه: كان هذا هو الجزء الرئيسي من المشروع ، واستخدمنا نموذج RandomForestClassifier. في وقت لاحق اختبرنا هذا النموذج مع مجموعة الاختبار للتقييم.

أتمنى أن تكون لديك فكرة بخصوص الخطوات المذكورة أعلاه. يرجى التأكد من أنك تتدرب وتحاول فهم كل خطوة. أتمنى أن تعجبك مقالتي.

تواصل معي على ينكدين.

الوسائط الموضحة في هذه المقالة ليست مملوكة لـ Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة

الدردشة معنا

أهلاً! كيف يمكنني مساعدك؟