Към съдържанието
wannacode

Описание на данните

Накратко: Описателната статистика казва къде е центърът на данните (средна, медиана, най-честа стойност) и колко се разпръскват (стандартно отклонение, процентили, IQR).

Проблем

„Средният клиент“

Управителят иска карта за лоялност. „Средният клиент прави по 8 поръчки годишно. Да дадем подарък на осмата поръчка: така всеки обикновен клиент ще го получи.“

Звучи разумно. Но колко клиенти стигат до осма поръчка? И колко поръчки прави един обикновен клиент? Средната отговаря само на един от тези въпроси, и не винаги на този, който си мислиш.

Идеята

Средна, медиана, най-често

Едно число, което казва „около колко са поръчките“, има три вида:

  • средната (mean): сборът, разделен на броя;
  • медианата (median): числото по средата, когато ги наредиш; половината са под нея, половината над нея;
  • най-честата стойност (mode): тази, която се среща най-много пъти.

Стойността на поръчка за годината, без отказаните поръчки:

Pythonданни: таблиците на магазина

Средната е 10,63 €, а медианата 7,70 €. Най-честата поръчка е за 2,40 €. Три числа за едни и същи данни, и 64,4% от поръчките са под средната.

Причината е опашката: малко големи поръчки (до 78,70 €) дърпат средната нагоре. Медианата не ги усеща, защото гледа само кое е по средата. Видя опашката в хистограмата на поръчките.

mode() връща списък, защото най-честите стойности може да са няколко с еднакъв брой. Затова values е закръглено до цент: иначе 2.4 и 2.4000000000000004 се броят за различни.

1. Пет поръчки: 4 €, 6 €, 7 €, 9 € и 12 €. Идва шеста, за 500 € (офис поръчва за цялата година). Какво става?

Идеята

Разсейване: обхват и стандартно отклонение

Средната не казва колко се различават поръчките една от друга. Два магазина със средна 10 € може да са много различни: в единия всяка поръчка е около 10 €, в другия има и по 1 €, и по 50 €. Това се казва разсейване (spread).

Pythonданни: таблиците на магазина

Обхватът (range) е най-голямата минус най-малката: 77,90 €. Той зависи само от двете крайни поръчки и една странна поръчка го променя.

Стандартното отклонение (standard deviation, std) е колко далеч от средната е обикновено една поръчка. Тук е 9,43 €: поръчка на 10,63 € ± около 9 € е нещо обичайно.

По-точно, за любопитните

std е корен от средния квадрат на разстоянията до средната. Квадратът прави големите разстояния много по-тежки, затова при дълга опашка std също расте.

pandas дели на n − 1, а NumPy (np.std) на n. При 10 459 поръчки разликата е в четвъртия знак след запетаята. При 5 числа е забележима: np.std(x, ddof=1) дава същото като pandas.

Идеята

Процентили и IQR

Процентилът казва под колко е даден дял от данните. 90-ият процентил е стойността, под която са 90% от поръчките. quantile ги дава с дял от 0 до 1:

Pythonданни: таблиците на магазина

10% от поръчките са до 2,40 €, а 90% до 22,92 €. Трите прекъснати линии са квартилите: 25-ият процентил (q1, 4,20 €), медианата (7,70 €) и 75-ият (q3, 14,00 €). Те делят поръчките на четири равни части.

Между q1 и q3 са средните 50% поръчки. Ширината им е IQR (interquartile range): 14,00 − 4,20 = 9,80 €. За разлика от обхвата, IQR не се мести от една огромна поръчка.

Виж и картината: от медианата до q3 са 6,30 €, а от q1 до медианата само 3,50 €. Дясната половина е разтеглена: това е опашката, казана с числа.

Пробвай

Прагът за безплатна доставка

Магазинът ще дава безплатна доставка на най-големите 10% поръчки. Над каква сума? Запиши прага в threshold.

Pythonданни: таблиците на магазина

Идеята

describe(), прочетено докрай

describe() от първия поглед към таблица дава наведнъж всичко дотук:

Pythonданни: таблиците на магазина

Сега всеки ред има смисъл:

  • count: 10 459 поръчки;
  • mean и std: 10,63 € средно, обикновено на около 9,43 € от нея;
  • min и max: от 0,80 € до 78,70 €;
  • 25%, 50%, 75%: квартилите. 50% е медианата.

Бърз поглед за опашка: mean е доста над 50% (10,63 € срещу 7,70 €), а от 75% до max има 64,70 €, срещу 3,40 € от min до 25%. Опашката е вдясно.

Идеята

„Средният клиент“ не съществува

Обратно към картата за лоялност. Колко поръчки прави всеки клиент за годината? Броят се всички поръчки, и отказаните: клиентът все пак е поръчал.

Pythonданни: таблиците на магазина

Клиентите са 1 390. Средно имат по 8 поръчки, но медианата е 4, а най-честото е 2. 224 клиенти са поръчали само веднъж, а най-редовният има 121 поръчки.

Хистограмата показва защо: повечето клиенти са вляво, при 1–5 поръчки, а дълга опашка от редовни клиенти стига до 121. Средната (плътната линия) е между двата свята и не описва никого добре. Клиентът „със средно 8 поръчки“ е число от сметката, не човек, когото ще срещнеш често.

Когато данните имат дълга опашка, медианата казва „обикновения“ случай, а средната е за друго: например колко поръчки ще дойдат общо от 100 нови клиенти.

Идеята

Необичайни стойности: правилото с IQR

Кои поръчки са необичайно големи? Често използваното правило е: необичайно е всичко на повече от 1,5 × IQR под q1 или над q3.

Pythonданни: таблиците на магазина

Горната граница е 14,00 + 1,5 × 9,80 = 28,70 €, а над нея са 609 поръчки. Долната е отрицателна, затова под нея няма нищо.

Правилото само посочва. Решението е твое: тези 609 поръчки са истински и носят около 21% от оборота. Махаш стойност само когато е доказана грешка, като цена без десетичната точка или дубликат, както видя в почистването.

Пробвай

Редовните клиенти

Кои клиенти поръчват необичайно често? Сметни горната граница по правилото с IQR за поръчките на клиент (в limit) и запиши в regulars клиентите над нея.

Pythonданни: таблиците на магазина

Упражнение

Подарък на осмата поръчка?

Колко поръчки прави обикновеният клиент? Запиши го в typical. И какъв дял от клиентите стигат до осма поръчка? Запиши дела (от 0 до 1) в reach.

Pythonданни: таблиците на магазина

Тест

Провери се

1. Средната поръчка е 10,63 €, а медианата 7,70 €. Какво казва това за поръчките?
2. Какво е IQR?
3. describe() дава 25% 4.20 за стойността на поръчка. Какво значи?
4. Правилото с IQR намира 609 поръчки над 28,70 €. Какво правиш с тях?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·