На этой странице

Данные кафе

Все страницы этого раздела разбирают один пример: небольшое кафе с двумя филиалами сменило меню, и владелец хочет понять, к чему это привело. Данные собраны в одном файле, cafe.ru.csv. Его достаточно скачать и загрузить так, как описано в разделе «Начало работы», и любое число с этих страниц можно воспроизвести. Эта страница — кодовая книга файла: откуда взялись данные, что хранится в каждом столбце и какие три изъяна нужно найти и исправить, чтобы числа имели смысл. С настоящими файлами приходится делать то же самое.

Данные синтетические: их сгенерировали по описанию, которое хранится рядом с файлом (cafe.json5). Поэтому они ведут себя как настоящие данные опроса и кассы (распределение времени ожидания скошено, есть несколько пропусков и одно нелепое значение), но ничьих реальных сведений в них нет.

История

У кафе два филиала: Набережная и Привокзальная. Восемь недель назад в нём сменили меню, и владелец хочет знать, оправдала ли себя перемена. Сведения есть из двух источников. Касса хранит траты каждого участника программы лояльности: средний чек и число визитов за восемь недель до смены меню и за восемь недель после. Кроме того, после смены участникам разослали по электронной почте короткий опрос. В нём шесть утверждений о еде и обслуживании (с каждым можно согласиться или не согласиться), общая оценка удовлетворённости, вопрос, порекомендуют ли они кафе, и время ожидания при последнем визите. Каждому участнику отведена одна строка, всего 200 участников и 15 столбцов.

У владельца четыре вопроса, и каждый устроен по-своему:

  • Изменились ли траты после смены меню? У каждого участника есть значение до смены и значение после, то есть одних и тех же людей измерили дважды. В приложении это план зависимых выборок: участники в нём — испытуемые, а «до» и «после» — замеры (сравнительный анализ).
  • Различаются ли филиалы? Участники «Набережной» и «Привокзальной» — разные люди, поэтому выборки независимые: филиал служит группирующей переменной, а сравниваемый показатель — зависимой (сравнительный анализ).
  • С чем связана общая удовлетворённость? Меняется ли общая оценка вместе с пунктами о еде, пунктами об обслуживании или временем ожидания и насколько сильно — вопрос для корреляционного и регрессионного анализа.
  • Измеряют ли шесть пунктов два разных свойства или одно? Опрос составляли из трёх пунктов о еде и трёх об обслуживании. Подтверждают ли ответы этот замысел, выясняют анализ надёжности и факторный анализ. В этих модулях переменными служат сами пункты, и ответ на вопрос — не различие, а структура.

Кодовая книга

После импорта приложение сообщает о 200 строках и 15 переменных. Все, кроме рекомендует, получают тип «непрерывная». Ниже описано, что хранится в столбцах исходного файла:

Столбец Содержание Значения Пропусков
вкус «Еда была вкусной» 1–5 —
свежесть «Продукты были свежими» 1–5 —
цена «Еда стоила своих денег» 1–5 —
приветливо «Персонал был приветлив» 1–5 —
быстро «Заказ принесли быстро» 1–5 —
медленно «Обслуживали медленно» 1–5, обратный пункт —
оценка «Насколько в целом вы довольны кафе?» 0–10 7
рекомендует «Порекомендуете ли вы нас другу?» «рекомендует» / «не рекомендует» —
ожидание Сколько минут участник ждал заказа при последнем визите 0.3–19.9 15
чек_до Средний чек за восемь недель до смены меню 1.50–18.94 —
чек_после Средний чек за восемь недель после смены 1.50–66.53 —
визиты_до Число визитов за восемь недель до смены 0–42 —
визиты_после Число визитов за восемь недель после смены 0–43 —
возраст Возраст в годах, как его указали в анкете программы лояльности 18–68 и 999 —
филиал Филиал, где участник вступил в программу 1 = «Набережная», 2 = «Привокзальная» —

Шесть пунктов опроса. На каждый отвечают по шкале от 1 («совершенно не согласен») до 5 («полностью согласен»), и ответы смещены в сторону согласия. Самое высокое среднее у приветливо (3.79), у вкус и свежесть оно около 3.5, а от половины до двух третей ответов на каждый пункт — 4 или 5. Исключение составляет медленно: среднее 2.52, половина ответов — 1 или 2. Это обратный пункт: он измеряет то же, что и быстро, только сформулирован наоборот, и низкий балл по нему означает хорошее обслуживание. Прежде чем суммировать или усреднять шесть пунктов, к нему нужно применить обратное кодирование (6 − балл). Анализ надёжности так и поступает с обратными пунктами. Три пункта касаются еды, три — обслуживания. Именно по этой структуре составляли опрос, и её же проверяют на данных страницы о факторном анализе.

Общая удовлетворённость и рекомендация. оценка — балл от 0 до 10: среднее 7.30, медиана 7, стандартное отклонение 1.90, семь участников на этот вопрос не ответили. В столбце рекомендует два значения: 135 участников рекомендуют кафе, 65 не рекомендуют, то есть доля рекомендующих — 67.5%. Оба столбца обобщают те же впечатления, что описывают шесть пунктов, поэтому хорошо подходят на роль исходов на страницах о корреляционном и регрессионном анализе.

Время ожидания. ожидание — сколько минут участник ждал при последнем визите. Распределено оно так, как обычно распределено время ожидания: чаще ждут недолго, изредка долго. Медиана 4.9 минуты, среднее 5.20, максимум 19.9, у распределения длинный правый хвост. Поэтому на странице о распределениях и нормальности оно служит примером переменной с явно ненормальным распределением. Пятнадцать участников на этот вопрос не ответили.

Траты и визиты. Столбцы кассы идут парами. чек_до и чек_после — средний чек за визит в денежных единицах: в среднем 8.71 до смены и 10.03 после (в неисправленном файле). визиты_до и визиты_после — счётчики: средние 6.98 и 7.62, обе медианы равны 6, у нескольких завсегдатаев больше 20 визитов, а у одного-двух больше 40. Оба значения пары относятся к одному человеку, поэтому тесно связаны: кто до смены тратил больше среднего, обычно и после тратит больше среднего (корреляция двух столбцов чека равна 0.69, если исключить заказ кейтеринга, о котором речь ниже). На этой связи и построен парный план.

Возраст. возраст — то, что участник вписал в анкету программы лояльности. У тех, кто его указал, возраст лежит в пределах от 18 до 68 лет, среднее 38.2, стандартное отклонение 10.1. Участники делятся примерно на две группы: студентов и офисных работников. Пятеро указать возраст отказались, и в анкете у них записано 999.

Филиал. В филиале «Набережная» в программу вступил 101 участник, в «Привокзальной» — 99. «Привокзальная» оживлённее, и данные сгенерированы так, что её участники тратят больше, ждут дольше и сильнее различаются между собой. Эти различия и проверяются на страницах о сравнениях.

Три исправления до анализа

Настоящие данные редко поступают в готовом к анализу виде. В этот файл три изъяна заложены намеренно: такие постоянно встречаются в реальных данных, и каждый исправляется в приложении за минуту. Исправления делаются один раз и в указанном порядке, а все числа на страницах раздела получены уже после них.

Код вместо категории. При импорте филиал распознаётся как число (1 и 2 — числа) и получает тип «непрерывная». Но это не измерение: «полутора филиалов» не бывает, и среднее 1.495 ничего не значит. Если так и оставить, столбец будет предлагаться как исход для сравнения, но никогда как группирующая переменная, которая делит участников на две группы. Откройте Преобразование данных, выберите Перекодировка значений, укажите филиал и дайте двум исходным значениям названия: 1 → Набережная, 2 → Привокзальная. Оставьте вариант Заменить исходные значения и сохраните правило. Столбец станет категориальным с двумя именованными уровнями, и с этого момента во всех таблицах и графиках вместо 1 и 2 будут стоять «Набережная» и «Привокзальная». (Тип «категориальная» можно задать и без перекодирования, в диалоге «Переменные». Так быстрее, но тогда уровни в результатах будут подписаны 1 и 2.)

Метка-заглушка вместо пропуска. Если запустить описательную статистику по столбцу возраст, максимум окажется равен 999, среднее 62.2, а стандартное отклонение 150.7. Для возраста это невозможно. Значение, которым анкета обозначает «не указано», называют меткой-заглушкой (sentinel). Приложение не может знать, что 999 — заглушка, и для него пятеро участников прожили по 999 лет. В Преобразовании данных выберите Пропущенные значения, действие Объявить коды пропусков, введите код 999 и укажите возраст. Пять ячеек станут пустыми, и в столбце останутся 195 участников со средним 38.2 и размахом от 18 до 68. Это не косметическая правка: корреляция возраста с чек_до равна 0.14 с заглушками и 0.23 без них. Всего пять ячеек из двухсот скрывали две трети связи.

Верное значение, но не для этого вопроса. Максимум чек_после равен 66.53, а следующий по величине чек — 20.08. В строке 136 записан участник «Привокзальной», который в период «после» заказал кейтеринг на офисный праздник, и касса разнесла эту сумму по его четырём визитам. Ошибки ввода здесь нет: эту сумму действительно заплатил реальный человек. Но для вопроса «изменила ли смена меню то, сколько тратят посетители?» это не средний чек за визит. К тому же значение сильно сказывается на результатах: стандартное отклонение изменения от «до» к «после» равно 4.37 с ним и 2.86 без него, так что одна строка из двухсот увеличивает разброс в полтора раза. Заметить такое значение можно так же, как 999, если до любой проверки посмотреть на максимум или на ящик с усами (правила, которые предлагает приложение, описаны на странице о выбросах и пропущенных данных). А исправляют его правилом, которое можно сформулировать одним предложением и привести в отчёте. Здесь оно такое: средний чек за период «после» выше 50 — это не трата за визит. Перекодировка диапазонов в Преобразовании данных для чек_после с Мин 50, пустым Макс и пропуском на выходе (переключатель ∅) делает пустой только эту ячейку и сохраняет всё остальное, что сообщил участник: ответы на опрос, чек до смены, визиты. (Можно исключить участника целиком фильтром наблюдений по условию чек_после Меньше чем (<) 50, но это более грубый путь: ради одной ячейки из всех анализов уходит хорошая строка.) Сам файл никогда не правят: правило и есть запись того, что было сделано.

И обычные пропуски. В столбце оценка 7 пустых ячеек, в ожидание 15, и ещё одна только что появилась в чек_после. Это не изъяны (на вопросы опроса часто не отвечают), но от них зависит число наблюдений в результатах. При настройке пропущенных данных по умолчанию, попарном удалении, каждый анализ берёт строки, заполненные по его переменным: 193 участника для оценка, 185 для ожидание и 178 для корреляции между ними. При построчном удалении любой анализ берёт только участников, у которых заполнены сразу все выбранные переменные, и если выбраны все пятнадцать, их 172. Оба способа допустимы, нужно лишь указать в отчёте, какой из них использован. А если какое-то число удивляет, первым делом стоит проверить, не оказалось ли n меньше 200.

Широкий и длинный формат

Файл записан в широком формате: одна строка на участника, значения до и после стоят рядом в разных столбцах. Такая форма подходит для большей части того, что делается в разделе (корреляции между столбцами, подсчёт баллов по шести пунктам, сравнение филиалов), но не для парного сравнения. План зависимых выборок в сравнительном анализе требует длинного формата: по строке на участника в каждом замере, столбец с названием замера («Старое меню» или «Новое меню») и идентификатор испытуемого, по которому видно, какие строки относятся к одному участнику.

Перестройку выполняет конвертер таблиц в разделе «Преобразование данных». Задайте в поле Количество замеров значение 2, а в полях Метки замеров — «Старое меню» и «Новое меню», выберите чек_до, чек_после, визиты_до и визиты_после в списке Переменные для объединения и оставьте порядок, при котором значения каждой переменной до и после стоят в соседних столбцах. Идентификатор испытуемого пусть создаётся автоматически по номерам строк, ведь в файле одна строка на участника. Просмотр показывает результат ещё до применения: 400 строк, по одному объединённому столбцу для чека и для визитов, столбец замера и идентификатор испытуемого. Тот же инструмент открывает и кнопка Преобразовать в длинный формат в сравнительном анализе. Она находится под переключателями типа анализа при любом плане, кроме одной выборки, и доступна при любой форме загруженного файла.

Применение конвертера заменяет загруженный набор данных. Поэтому парные сравнения лучше оставить напоследок или заранее сохранить файл проекта, чтобы для остальных анализов вернуться к широкому файлу.

Из чего исходят страницы

Если на странице не оговорено иное, её числа получены на файле с тремя исправлениями, описанными выше (филиал перекодирован в названия, 999 в возраст объявлено пропуском, заказ кейтеринга в чек_после заменён пропуском), при настройках приложения по умолчанию: попарное удаление, уровень доверия 95%, три знака после запятой для p-значений, без поправки на множественные сравнения. Если какая-то страница отступает от этих условий, это оговорено рядом с числом. На странице «Проверка гипотез» разобраны сравнение филиалов по чек_до, изменение чека и визитов от «до» к «после», сравнение шести пунктов опроса между филиалами, корреляция между возраст и оценка и сравнение оценка между филиалами с границей эквивалентности. На странице «Выбор анализа» для каждого из четырёх вопросов владельца подобраны модуль и карточки результатов. Её стоит прочитать следующей.