← Назад к вопросам

Предоставляли ли на проекте полные данные для анализа

1.0 Junior🔥 161 комментариев
#Опыт работы и проекты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Реальная история с неполными данными

Первое правило аналитика: данные никогда не бывают идеальны

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

Кейс 1: Пропущенные значения в важной колонке

В одном из проектов по анализу поведения пользователей я работал с таблицей событий:

SELECT 
  user_id,
  event_type,
  timestamp,
  device_type  -- эта колонка имела 30% NULL
FROM events
WHERE date >= 2024-01-01

Как я решил проблему:

  1. Диагностировал причину — для событий со старых версий приложения device_type не логировался
  2. Не просто удалил строки — это было бы потеря 30% данных
  3. Заполнил пропуски логически:
    • Проверил, есть ли device_type в других событиях того же пользователя
    • Использовал последнее известное значение (Last Observation Carried Forward)
    • Для оставшихся пробелов применил медиану по когорте
import pandas as pd

df = pd.read_csv(events.csv)

# Заполнение пропусков
df[device_type] = df.groupby(user_id)[device_type].fillna(method=ffill)
df[device_type] = df[device_type].fillna(df[device_type].mode()[0])

Результат: удалось использовать все 100% данных вместо потери 30%.

Кейс 2: Несогласованные данные между источниками

Я анализировал конверсию с рекламы в приложение. Трекеры отчитывались по-разному:

  • Google Analytics считал 10 000 установок
  • Firebase считал 8 500 установок
  • API AppStore показывал 9 200 установок

Что я сделал:

  1. Нашел расхождения через SQL запрос:
SELECT 
  ga.installs as ga_installs,
  fb.installs as fb_installs,
  appstore.installs as appstore_installs,
  ABS(ga.installs - fb.installs) as diff
FROM ga_events ga
FULL OUTER JOIN firebase_events fb ON ga.date = fb.date
FULL OUTER JOIN appstore_events appstore ON ga.date = appstore.date
WHERE ABS(ga.installs - fb.installs) > 100
  1. Выяснил причины:

    • Google Analytics пересчитывает данные с задержкой в 24 часа
    • Firebase считает только активированные события, исключая фальшивые клики
    • AppStore — самый надежный источник, но с лагом в 2-3 часа
  2. Выработал единый подход:

    • Использовал AppStore как source of truth
    • Google Analytics применял с 2-дневной задержкой
    • Firebase использовал для валидации, но не основного расчета

Как я работаю с неполными данными

Первый шаг — измерить качество:

import pandas as pd
import numpy as np

def assess_data_quality(df):
    report = {
        total_rows: len(df),
        missing_percentages: (df.isnull().sum() / len(df) * 100).round(2),
        duplicates: df.duplicated().sum(),
        data_types: df.dtypes
    }
    return report

quality = assess_data_quality(df)
print(quality)

Второй шаг — задать правильные вопросы:

  • Почему данные пропущены? (систематически или случайно?)
  • Влияет ли отсутствие этих данных на результат анализа?
  • Есть ли способ восстановить или заменить недостающие значения?
  • Нужно ли исключить целые группы данных из анализа?

Третий шаг — документировать решения:

Всегда создавал data_quality_report.md для каждого анализа с описанием:

  • Что было не так
  • Какие решения я принял
  • Какие допущения я сделал
  • Какова потенциальная ошибка в результатах

Ключевая компетенция

Аналитик, который говорит "у вас грязные данные, я не могу ничего сделать" — это не аналитик, это отговорка. Хороший аналитик работает именно с реальными, неполными данными и находит способы:

  • Очистить их
  • Валидировать
  • Восстановить недостающее
  • Объяснить ограничения
  • Дать рекомендации, как улучшить сбор данных

Вы не найдете идеальные данные ни в одном реальном проекте. Вопрос не в том, полные ли они, а в том, можешь ли ты с ними работать умно.

Предоставляли ли на проекте полные данные для анализа | PrepBro