Ochiq mashinalarni o'rganish kursi. Mavzu 1. Pandalar yordamida ma'lumotlarni tahlil qilish

Ushbu maqola bilan biz, OpenDataScience, ochiq Mashina o'rganish kursini boshlaymiz. Bu mashina o'rganish yoki ma'lumotni tahlil qilish bo'yicha boshqa keng qamrovli kirish kursini ishlab chiqishga mo'ljallanmagan (shuning uchun bu fundamental ta'lim yoki onlayn / oflayn kurslar / mutaxassisliklar va kitoblarning o'rnini bosmaydi). Ushbu ketma-ket maqolalarning maqsadi - bilimingizni tezda yangilash va kelgusida oldinga siljish uchun mavzularni topishga yordam berish. Bizning yondashuvimiz Deep Learning kitobi mualliflariga o'xshaydi, u matematikani va mashinalarni o'qitish asoslarini o'rganishdan boshlangan - qisqa, ixcham va boshqa manbalarga havolalar mavjud.

UPD: videolarni tomosha qiladigan YouTube pleylisti

Kurs nazariya va amaliyotni mukammal muvozanatlash uchun mo'ljallangan; shuning uchun har bir mavzudan keyin bir hafta ichida topshiriq beriladi. Shuningdek, kurs davomida o'tkaziladigan Kaggle Inclass musobaqalarida qatnashishingiz mumkin.

Barcha materiallar Kaggle ma'lumotlar bazasi va GitHub repolarida mavjud.

Kurs OpenDataScience Slack jamoasida faol muhokama qilinadi. Iltimos, taklif qilish uchun ushbu shaklni to'ldiring. Kursning keyingi sessiyasi 2018 yil 1 oktyabrda boshlanadi. Taklifnomalar sentyabr oyida yuboriladi.

Maqolaning qisqacha mazmuni

1. Dars haqida
2. Topshiriqlar
3. Pandasning asosiy usullarini namoyish qilish
4. Telekomning ishdan chiqishini bashorat qilishga birinchi urinish
5. Topshiriq №1
6. Foydali manbalar

1. Dars haqida

O'quv rejasi

  1. Pandalar bilan ma'lumotni tahlil qilish
  2. Python yordamida vizual ma'lumotlarni tahlil qilish
  3. Tasniflash, qaror daraxtlari va k yaqin qo'shnilar
  4. Chiziqli tasnif va regressiya
  5. Bagging va tasodifiy o'rmon
  6. Xususiyat muhandisligi va xususiyatlarni tanlash
  7. Nazorat qilinmaydigan o'rganish: asosiy komponentlar tahlili va klasterlash
  8. Vowpal Wabbit: Gigabayt ma'lumotlarini tez o'rganish
  9. Vaqt seriyasini Python bilan tahlil qilish, Facebook payg'ambar bilan kelajakni bashorat qilish
  10. Gradientni kuchaytirish

Jamiyat

Kursimizning eng muhim afzalliklaridan biri bu faol hamjamiyatdir. Agar siz OpenDataScience Slack jamoasiga qo'shilsangiz, o'sha erda (#eng_mlcourse_open) sizga maqola va topshiriqlar mualliflarini topishingiz mumkin. Bu har qanday intizomga birinchi qadam qo'yganingizda juda ko'p yordam beradi. Taklif qilish uchun ushbu shaklni to'ldiring. Shakl sizning bilimingiz va malakangiz haqida bir nechta savollarni, shu jumladan matematikaga oid bir nechta oson savollarni beradi.

Biz norasmiy tarzda suhbatlashamiz, masalan, hazil va kulgich. Har bir MOOC bunday tirik jamiyat bilan maqtana olmaydi.

Talablar

Talablar quyidagilardan iborat: hisoblashdan asosiy tushunchalar, chiziqli algebra, ehtimollik nazariyasi va statistikasi va Python dasturlash qobiliyatlari. Agar siz quvib etishingiz kerak bo'lsa, "Chuqur o'rganish" kitobining birinchi qismi va turli xil matematik va Python onlayn kurslari bo'ladi (Python, CodeAcademy uchun). Qo'shimcha ma'lumotni tegishli Wiki sahifasida olish mumkin.

Sizga qanday dastur kerak bo'ladi

Hozircha kodni kursga chiqarish uchun sizga faqat Anaconda (Python 3.6-da yaratilgan) kerak bo'ladi. Keyinchalik kursda Xgboost va Vowpal Wabbit kabi boshqa kutubxonalarni o'rnatishingiz kerak bo'ladi.

Bundan tashqari, siz allaqachon o'rnatilgan barcha dasturiy ta'minot bilan Docker konteyneriga murojaat qilishingiz mumkin. Qo'shimcha ma'lumotni tegishli Wiki sahifasida olish mumkin.

2. Topshiriqlar

  • Har bir maqola Jupyter daftarchasi shaklida topshiriq bilan birga keladi. Vazifa etishmayotgan kod parchalarini to'ldirish va Google Quiz shaklida savollarga javob berish;
  • Har bir topshiriqni bajarish bir hafta ichida nihoyasiga etadi;
  • Iltimos, OpenDataScience Slack guruhining #eng_mlcourse_open kanalida yoki bu erda Mediumdagi maqolalarga berilgan sharhlarda dars mazmunini (maqolalar va topshiriqlar) muhokama qiling;
  • Topshiriqlar uchun echimlar tegishli Google shaklini taqdim etganlarga yuboriladi.

3. Pandasning asosiy usullarini namoyish qilish

Xo'sh ... Pandalar va vizual ma'lumotlarni tahlil qilish bo'yicha o'nlab ajoyib darsliklar mavjud. Agar siz ushbu mavzular bilan tanish bo'lsangiz, seriyadagi 3-chi maqolani kuting, u erda biz mashinani o'rganishga kirishamiz.

Quyidagi material Jupyter daftarchasi sifatida yaxshiroq ko'rib chiqilgan va agar siz kurslar omborini klonlasangiz Jupyter bilan mahalliy nusxada ko'chirishingiz mumkin.

Pandas bu Python kutubxonasidir, u ma'lumotlarni tahlil qilish uchun keng vositalarni taqdim etadi. Ko'pincha ma'lumotlar olimi .csv, .tsv yoki .xlsx kabi jadval formatlarida saqlanadigan ma'lumotlar bilan ishlaydi. Pandas bunday jadval jadvallarini SQL-ga o'xshash so'rovlar yordamida yuklash, ishlov berish va tahlil qilish uchun juda qulay qiladi. Matplotlib va ​​Seaborn bilan birgalikda Pandas jadval ma'lumotlarini vizual tahlil qilish uchun keng imkoniyatlarni taqdim etadi.

Pandasdagi asosiy ma'lumotlar tuzilmalari Series va DataFrame sinflari bilan amalga oshiriladi. Birinchisi, ba'zi bir sobit ma'lumotlar turining bir o'lchovli indekslangan qatoridir. Ikkinchisi - ikki o'lchovli ma'lumotlar tuzilishi - jadval - bu erda har bir ustun bir xil turdagi ma'lumotlarga ega. Siz uni Seriesinidents lug'ati sifatida ko'rishingiz mumkin. DataFrames haqiqiy ma'lumotlarni taqdim etish uchun juda yaxshi: satrlar instantsiyalarga (ob'ektlar, kuzatishlar va boshqalar), ustunlar esa har bir holatga mos keladi.

Biz telekommunikatsiya operatori mijozlarining shovqin darajasi bo'yicha ma'lumotlar bazasini tahlil qilish orqali asosiy usullarni namoyish etamiz. Ma`lumotlarni o'qib chiqaylik (read_csv-dan foydalanib) va bosh usuli yordamida dastlabki 5 qatorni ko'rib chiqaylik:

Eslatib o'tamiz, har bir satr bitta mijozga to'g'ri keladi, bizning tadqiqotimiz ob'ekti va ustunlar - bu ob'ektning xususiyatlari.

Keling, ma'lumotlar o'lchamlari, xususiyatlar nomlari va xususiyat turlarini ko'rib chiqaylik.

bosib chiqarish (df.shape)

(3333, 20)

Chiqish natijasidan biz jadvalda 3333 qator va 20 ustun mavjudligini ko'rishimiz mumkin. Endi ustunlar yordamida ustun nomlarini chop etishga harakat qilaylik:

chop etish (df. ustunlar)

Indeks (['Shtat', 'Hisobning davomiyligi', 'Mintaqa kodi', 'Xalqaro reja',
       "Ovozli pochta rejasi", "Vmail xabarlarining raqami", "Umumiy kun daqiqalari",
       "Umumiy kunlik qo'ng'iroqlar", "Umumiy kunlik narxlar", "Barcha kechki daqiqalar",
       "Obunaviy qo'ng'iroqlarning umumiy qiymati", "Barcha kecha haqi", "Tunning barcha daqiqalari",
       "Umumiy tungi qo'ng'iroqlar", "Umumiy tungi qo'ng'iroq", "Jami qo'ng'iroq daqiqalari",
       "Umumiy qo'ng'iroqlar", "Umumiy to'lov", "Mijozlarga xizmat qo'ng'iroqlari",
       'Churn'],
      tipi = 'ob'ekt')

Ma'lumotlar oynasi haqida ba'zi umumiy ma'lumotlarni chiqarish uchun biz info () usulidan foydalanishimiz mumkin:

chop etish (df.info ())


RangeIndex: 3333 yozuv, 0 dan 3332 gacha
Ma'lumotlar ustunlari (jami 20 ustun):
Davlat 3333 nol bo'lmagan ob'ekt
Hisob uzunligi 3333 nolga teng bo'lmagan int64
Uchastka maydoni 3333 nolga teng bo'lmagan int64
3333 nolga teng bo'lmagan xalqaro reja
Ovozli pochta rejasi 3333 nol bo'lmagan ob'ekt
Pochta xabarlari 3333 nolga teng bo'lmagan int64
Umumiy kun daqiqalari 3333 nol bo'lmagan float64
Umumiy qo'ng'iroqlar 3333 nolga teng bo'lmagan int64
Umumiy zaryad 3333 nol bo'lmagan float64
Umumiy oqshom daqiqalari 3333 nol bo'lmagan float64
Umumiy oqshom qo'ng'iroqlari 3333 nolga teng bo'lmagan int64
Umumiy oqimi 3333 nol bo'lmagan float64
Umumiy kecha daqiqalari 3333 nol bo'lmagan float64
Umumiy tungi qo'ng'iroqlar 3333 nolga teng bo'lmagan int64
Umumiy tungi zaryad 3333 nol bo'lmagan float64
Umumiy 33 minut 333 nol bo'lmagan float64
Umumiy xalqaro qo'ng'iroqlar 3333 nolga teng bo'lmagan int64
Umumiy zaryad 3333 nol bo'lmagan float64
Mijozlarga xizmat ko'rsatish 3333 nolga teng bo'lmagan int64 raqamiga qo'ng'iroq qiladi
3333 null bo'lmagan bulyonni yondiring
tiplar: bul (1), float64 (8), int64 (8), ob'ekt (3)
xotira sarfi: 498.1+ KB
Yo'q

bool, int64, float64 va ob'ekt bizning xususiyatlarimizga tegishli ma'lumotlar turidir. Ko'rmoqdamizki, bitta xususiyat mantiqiy (bool), 3 xususiyat ob'ekt ob'ekti va 16 xususiyat raqamli hisoblanadi. Xuddi shu usul bilan biz biron bir etishmayotgan qiymatlar mavjudligini ko'rishimiz mumkin. Bu erda hech narsa yo'q, chunki har bir ustunda 3333 ta kuzatuv mavjud, avval biz ko'rgan shakllar soni shuncha.

Biz ustun turini astype usuli bilan o'zgartirishimiz mumkin. Ushbu usulni ch64-ga aylantirish uchun Churn xususiyatiga murojaat qilaylik:

df ['Churn'] = df ['Churn']. sport turi ('int64')

Ta'rif usuli har bir raqamli xususiyatning (int64 va float64 turlarining) asosiy statistik xususiyatlarini ko'rsatadi: etishmayotgan qiymatlar soni, o'rtacha, standart og'ish, oraliq, median, 0,25 va 0,75 kvartil.

df.escript ()

Raqamsiz xususiyatlar to'g'risidagi statistikani ko'rish uchun, kiritilgan parametrga qiziqish bildiradigan ma'lumotlar turlarini aniq ko'rsatish kerak.

dfescript (o'z ichiga oladi = ['object', 'bool'])

Kategoriya (ob'ekt turi) va boolean (type bool) xususiyatlari uchun value_counts usulidan foydalanishimiz mumkin. Churnning tarqalishini ko'rib chiqamiz:

df ['Churn']. value_counts ()

0 2850
1 483
Ism: Churn, turi: int64

3333 dan 2850 foydalanuvchi sodiq; nisbati hisoblash uchun normalize = value_counts funktsiyasiga to'g'ri keladi

df ['Churn']. value_counts (normalizatsiya = True)

0 0.855086
1 0.144914
Ism: Churn, turi: float64

Tartiblash

DataFrame o'zgaruvchilardan biri (ya'ni ustunlar) qiymati bo'yicha tartiblanishi mumkin. Masalan, Umumiy kunlik zaryad bo'yicha saralashimiz mumkin (kamayib boruvchi tartibda tartiblash uchun o'sish = False qiymatidan foydalaning):

df.sort_values ​​(by = 'Umumiy kunlik zaryad', o'sish = False) .head ()

Shu bilan bir qatorda, biz bir nechta ustunlar bo'yicha saralashimiz mumkin:

df.sort_values ​​(tomonidan = ['Churn', 'Umumiy kunlik zaryad'], ko'tarilish = [To'g'ri, Soxta]). bosh ()

Indekslash va ma'lumotlarni olish

DataFrame turli yo'llar bilan indeksatsiya qilinishi mumkin.

Bitta ustunni olish uchun siz DataFrame ['Name'] qurilishidan foydalanishingiz mumkin. Keling, ushbu ustun haqida savolga javob berish uchun foydalanaylik: bizning ma'lumotlar to'plamida chaynalgan foydalanuvchilarning ulushi qancha?

df ['Churn']. o'rtacha ()

0.14491449144914492

14,5% aslida kompaniya uchun juda yomon; Bunday keskin o'sish kompaniyani bankrotga aylantirishi mumkin.

Bitta ustun bilan mantiqiy indekslash ham juda qulay. Sintaksisi df [P (df ['Ism'])], bu erda P - Ism ustunining har bir elementi uchun tekshiriladigan mantiqiy holat. Bunday indeksatsiya natijasi faqat Ism ustunidagi P shartini qondiradigan satrlardan tashkil topgan DataFrame.

Savolga javob berish uchun undan foydalanaylik:

Ishlamaydigan foydalanuvchilar uchun raqamli o'zgaruvchilarning o'rtacha qiymatlari qanday?

df [df ['Churn'] == 1] .mean ()

Hisobning uzunligi 102.664596
Hudud kodi 437.817805
Vmail xabarlari raqami 5.115942
Umumiy kun daqiqalari 206.914079
Umumiy kunlik qo'ng'iroqlar 101.335404
Umumiy kunlik to'lov 35.175921
Umumiy oqshom daqiqalari 212.410145
Umumiy qo'ng'iroqlar 100.561077
Kechasi umumiy to'lov 18.054969
Jami tungi daqiqalar 205.231677
Umumiy tungi qo'ng'iroqlar 100.399586
Umumiy tungi to'lov 9.235528
Umumiy xalqaro daqiqalar 10.700000
Jami xalqaro qo'ng'iroqlar 4.163561
Umumiy zaryad 2.889545
Mijozlarga xizmat ko'rsatish 2.229814 raqamiga qo'ng'iroq qiladi
Churn 1.000000
tip: float64

Kunduzgi vaqt ichida telefonda ishlaydigan foydalanuvchilar qancha vaqt sarflashadi?

df [df ['Churn'] == 1] ['Umumiy kun daqiqalari']. o'rtacha ()

206.91407867494814

Xalqaro rejaga ega bo'lmagan sodiq foydalanuvchilar (Churn == 0) o'rtasidagi xalqaro qo'ng'iroqlarning maksimal uzunligi qancha?

df [(df ['Churn'] == 0) & (df ['Xalqaro reja'] == 'Yo'q')] ['Jami daqiqali daqiqalar']. max ()

18.899999999999999

DataFrames ustunlar nomi (yorliq) yoki satr nomi (indeks) yoki qatorning seriya raqami bilan indekslanishi mumkin. Lok metodi nom bo'yicha indekslash uchun ishlatiladi, iloc () esa raqam bo'yicha indekslash uchun ishlatiladi.

Birinchi holda, biz "0 dan 5 gacha bo'lgan indekslari bo'lgan qatorlarni (shu jumladan) va shtatdan mintaqa kodiga (shu jumladan)" deb ko'rsatilgan qiymatlarni beramiz, ikkinchi holatda esa "beramiz" deymiz biz birinchi uchta ustunlardagi birinchi besh qatorning qiymatlarini (odatdagi Python tilimidagi kabi: maksimal qiymat qo'shilmagan) ".

df.loc [0: 5, 'Shtat': 'Hudud kodi']

df.iloc [0: 5, 0: 3]

Agar bizga ma'lumotlar freymining birinchi yoki oxirgi qatori kerak bo'lsa, biz df [: 1] yoki df [-1:] sintaksisidan foydalanamiz.

Vazifalarni uyalar, ustunlar va satrlarga qo'llash

Har bir ustunga funktsiyalarni qo'llash uchun apply () dan foydalaning:

t.f.d. (np.max)

Davlat WY
Hisobning uzunligi 243
Hudud kodi 510
Xalqaro reja Ha
Ovozli pochta rejasi Ha
Vmail xabarlari raqami 51
Umumiy kun daqiqalari 350,8
Umumiy qo'ng'iroqlar 165
Umumiy kunlik zaryad 59.64
Umumiy oqshom daqiqalari 363.7
Umumiy qo'ng'iroqlar soni 170
Umumiy oqshom haqi 30.91
Umumiy tun 395
Umumiy tungi qo'ng'iroqlar 175
Umumiy tungi to'lov 17.77
Umumiy 20 daqiqa
Umumiy xalqaro qo'ng'iroqlar 20
Umumiy zaryad 5.4
Mijozlarga xizmat qo'ng'iroqlari 9
1-rasm
tip: ob'ekt

Qo'llash usuli har bir satrda funktsiyani qo'llash uchun ham ishlatilishi mumkin. Buning uchun eksa = 1 ni belgilang. Bunday stsenariylarda Lambda funktsiyalari juda qulaydir. Masalan, agar biz V dan boshlanadigan barcha holatlarni tanlashimiz kerak bo'lsa, biz buni quyidagicha qilishimiz mumkin:

df [df ['Holat']. (lambda holati: holat [0] == 'W')]. bosh ()

Xarita usuli ustundagi qiymatlarni almashtirish uchun ishlatilishi mumkin: {old_value: new_value} shaklining lug'ati o'z argumenti sifatida:

Xuddi shu narsani almashtirish usuli bilan amalga oshirish mumkin:

df = df.replace ({'Ovozli pochta rejasi': d})
 df.head ()

Guruhlash

Umuman olganda, Pandasda ma'lumotlarni guruhlash quyidagicha amalga oshiriladi.

df.groupby (by = guruhlash_ ustunlari) [ustunlar_to_show] .funktsiya ()
  1. Birinchidan, groupby usuli grouping_columnlarni qiymatlariga qarab ajratadi. Olingan ma'lumotlar oynasida ular yangi indeksga aylanadi.
  2. Keyin qiziqish ustunlari tanlanadi (ustunlar_to_show). Agar ustunlar_to_show tarkibiga kirmasa, guruhga kirmaydigan barcha narsalar qo'shiladi.
  3. Nihoyat, tanlangan ustunlar bo'yicha olingan guruhlarga bir yoki bir nechta funktsiyalar qo'llaniladi.

Churn o'zgaruvchisining qiymatlari bo'yicha ma'lumotlarni guruhlashimiz va har bir guruhda uchta ustunning statistikasini ko'rsatadigan misol.

Keling, xuddi shu narsani qilaylik, lekin vazifalar ro'yxatini agg () ga o'tish orqali biroz boshqacha yo'l tuting:

Xulosa jadvallari

Aytaylik, biz tanlagan namunadagi kuzatuvlar ikki o'zgaruvchi - Churn va International rejasi doirasida qanday taqsimlanganligini ko'rmoqchimiz. Buni amalga oshirish uchun, biz kesish jadvalidan foydalanib, favqulodda vaziyatlar jadvalini tuzamiz:

pd.crosstab (df ['Churn'], df ['Xalqaro reja'])

pd.crosstab (df ['Churn'], df ['Ovozli pochta rejasi'], normalizatsiya = True)

Ko'pchilik foydalanuvchilarning sodiqligini va qo'shimcha xizmatlardan foydalanmayotganligini ko'rishimiz mumkin (Xalqaro reja / ovozli pochta).

Bu Excel bilan tanish bo'lganlarga pivot jadvallariga o'xshaydi. Va, albatta, pivot jadvallari Pandas-da amalga oshiriladi: pivot_table usuli quyidagi parametrlarni oladi:

  • qiymatlar - statistikani hisoblash uchun o'zgaruvchilar ro'yxati,
  • index - guruh bo'yicha ma'lumotlarga o'zgaruvchilar ro'yxati,
  • aggfunc - guruhlar uchun qanday statistikani hisoblashimiz kerak - masalan, o'rtacha, maksimal, minimal yoki boshqa narsalar.

Hudud kodi bo'yicha kunduzgi, kechki va tungi qo'ng'iroqlar sonini ko'rib chiqaylik:

df.pivot_table (['Jami qo'ng'iroqlar', 'Barcha qo'ng'iroqlar', 'Barcha tungi qo'ng'iroqlar'], ['Hudud kodi'], aggfunc = 'O'rtacha')

DataFrame-ning o'zgarishi

Pandasdagi boshqa ko'plab narsalar singari, DataFrame-ga ustunlar qo'shish bir necha usul bilan amalga oshiriladi.

Masalan, agar biz barcha foydalanuvchilar uchun qilingan qo'ng'iroqlar sonini hisoblashni istasak, total_qo'ng'iroqlar seriyasini yaratamiz va DataFrame-ga joylashtiramiz:

Serial oralig'ini yaratmasdan ustunni osongina qo'shish mumkin:

Ustunlarni yoki satrlarni o'chirish uchun, kerakli indekslarni va eksa parametrlarini o'tkazib yuborish usulidan foydalaning (agar siz ustunlarni yo'q qilsangiz 1, va satrlarni yo'q qilsangiz 0). Ichki argument asl DataFrame-ni o'zgartirish yoki o'zgartirish kerakligini aytadi. Inside = False bilan ochish usuli mavjud DataFrame-ni o'zgartirmaydi va tushgan satrlar yoki ustunlar bilan yangisini qaytaradi. Inside = True bilan, u DataFrame-ni o'zgartiradi.

4. Telekomning ishdan chiqishini bashorat qilishga birinchi urinish

Xiralashish tezligi Xalqaro reja o'zgaruvchisi bilan qanday bog'liqligini ko'rib chiqaylik. Biz buni o'zaro to'qnashuv jadvali yordamida va Seaborn yordamida vizual tahlil orqali amalga oshiramiz (ammo keyingi vizual tahlil batafsilroq yoritiladi).

pd.crosstab (df ['Churn'], df ['Xalqaro reja'], hoshiyalar = To'g'ri)

Biz Xalqaro Rejaga binoan, yonish tezligi ancha yuqori ekanligini va bu qiziqarli kuzatishni anglatadi! Ehtimol, xalqaro qo'ng'iroqlar bilan bog'liq katta va yomon nazorat qilinadigan xarajatlar juda ziddiyatli va aloqa operatori mijozlarining noroziligiga olib keladi.

Endi yana bir muhim xususiyat - mijozlarga xizmat qo'ng'iroqlarini ko'rib chiqaylik. Keling, xulosa jadvali va rasm yarataylik.

pd.crosstab (df ['Churn'], df ['Mijozlarga xizmat qo'ng'iroqlari'], chekkalar = True)

sns.countplot (x = 'Mijozlarga xizmat qo'ng'iroqlari', hue = 'Churn', ma'lumotlar = df);

Ehtimol, bu jadval jadvalidan unchalik ravshan emas, ammo rasm 4-dan boshlab xizmat ko'rsatish markaziga qo'ng'iroq qilishdan so'ng keskin oshishi aniq ko'rsatilgan.

Endi DataFrame-ga ikkilik atributini qo'shamiz - Mijozlarga xizmat qo'ng'iroqlar> 3. Va yana bir bor, uning chayqalish bilan qanday bog'liqligini ko'rib chiqamiz.

Keling, yana bir nosozlik jadvalini tuzaylik, u Churnni ikkala Xalqaro reja va yangi yaratilgan Many_service_calls bilan bog'laydi.

pd.crosstab (df ['Many_service_calls'] & df ['International plan'], df ['Churn'])

Shuning uchun, xizmat ko'rsatish markaziga qo'ng'iroqlar soni 3 tadan ko'p bo'lganida va Xalqaro reja qo'shilganda (va Churn = 0 bashoratini bashorat qilishda) mijozning churillashi (Churn = 1) ni taxmin qilish biz aniqligini kutishimiz mumkin. 85,8% (biz faqat 464 + 9 marta xato qilamiz). Ushbu raqam, 85,8%, biz juda oddiy mulohazalar bilan oldik, biz quradigan mashinalarni o'rganish bo'yicha keyingi modellar uchun yaxshi boshlang'ich nuqtasi bo'lib xizmat qiladi.

Ushbu kursni davom etar ekanmiz, mashinani o'rganishdan oldin ma'lumotlarni tahlil qilish jarayoni shunga o'xshash ko'rinishini eslang. Keling, nimani yoritganimizni bilib olaylik:

  • Namunadagi sodiq mijozlarning ulushi 85,5% ni tashkil qiladi. Bunday ma'lumotlarga nisbatan "sodiq mijoz" ni doimo bashorat qiladigan eng sodda model barcha holatlarning 85,5% da to'g'ri keladi. Ya'ni, keyingi modellarning to'g'ri javoblari (aniqligi) nisbati bu raqamdan kam bo'lmasligi kerak va umid qilamanki, ancha yuqori bo'ladi;
  • Quyidagi formula bilan ifodalanishi mumkin bo'lgan oddiy prognoz yordamida: "(Mijozlarga xizmat ko'rsatuvchi qo'ng'iroqlar> 3) & (Xalqaro reja = Haqiqat) => Churn = 1, boshqa Churn = 0" biz taxmin qilish tezligini kutishimiz mumkin. 85,8%, bu 85,5% dan yuqori. Keyinchalik, qarorlar daraxti haqida gaplashamiz va faqat kirish ma'lumotlari asosida avtomatik ravishda ushbu qoidalarni qanday topish mumkinligini aniqlaymiz;
  • Mashinada o'qishni qo'llamasdan biz ushbu ikkita asosni oldik va ular bizning keyingi modellarimiz uchun boshlang'ich nuqtasi bo'lib xizmat qiladi. Agar juda katta sa'y-harakatlar bilan biz to'g'ri javoblar ulushini har 0,5% ga ko'paytirsak, demak biz noto'g'ri ish qilyapmiz va ikkita shartli oddiy model bilan cheklanib qolishimiz kifoya qiladi;
  • Murakkab modellarni o'qitishdan oldin, ma'lumotlarni biroz manipulyatsiya qilish, ba'zi uchastkalarni tuzish va oddiy taxminlarni tekshirish tavsiya etiladi. Bundan tashqari, mashinalarni o'qitishning amaliy dasturlarida, ular odatda oddiy echimlardan boshlanib, undan murakkablarini sinab ko'rishadi.

5. Topshiriq №1

Topshiriqlarning to'liq versiyalari har haftada kursning yangi bosqichida e'lon qilinadi (2018 yil 1 oktyabr). Shu bilan birga, demo versiyasi bilan mashq qilishingiz mumkin: Kaggle Kernel, nbviewer.

6. Foydali manbalar

  • Birinchidan, albatta, rasmiy Pandas hujjatlari
  • Pandalarga 10 daqiqa
  • Pandas cheatsheet PDF
  • GitHub repo: Pandas mashqlari va "Samarali pandalar"
  • scipy-lectures.org - pandalar, numby, matplotlib va ​​skikit-o'rganish bo'yicha darsliklar
  • Ushbu kurs GitHub ombori, Kaggle ma'lumotlar bazasi bilan bir xil materiallar

Mualliflar: Yuriy Kashnitskiy va Katya Demidova. Yuanyuan Pao, Kristina Butsko, Anastasiya Manoxina, Egor Polusmak, Sergey Isaev va Artem Trunov tomonidan tarjima qilingan va tahrirlangan.