понедельник, 16 сентября 2024 г.

Критерий Колмогорова-Смирнова VS критерий Шапиро-Уилка в тесте на нормальность

from scipy import stats as st

sample = [1,2,3,4,5]
results = st.shapiro(sample)
Если выборка небольшая или средняя по размеру (до 5000 наблюдений), критерий Шапиро-Уилка — лучший выбор, так как он более чувствителен к отклонениям от нормальности. Если выборка большая, можно использовать критерий Колмогорова-Смирнова, хотя в таких случаях более целесообразно визуально проверить распределение или воспользоваться другими критериями, такими как Лиллиефорс, модификация Колмогорова-Смирнова.

суббота, 14 сентября 2024 г.

Общие принципы создания базы экспериментов

 

  • достоверность вносимой информации должна быть подтверждена не только её автором, но и другим участником базы, например, другим автором; а правила проверки — зафиксированы и понятны. Это делают во избежание ошибок при заполнении базы и крайне редко, чтобы исключить влияние недобросовестных сотрудников.
  • Прозрачность. Всем пользователям должны быть ясны правила добавления, изменения и удаления информации из базы.
  • Стандартный формат записей. Каждый пользователь будет понимать, как найти нужные сведения.
  • Доступность базы для всех заинтересованных внутри компании. Уровни доступа могут различаться, но видеть результаты работы других полезно всем. Как минимум, чтобы не делать одно и то же несколько раз. Как максимум, чтобы на основе чужих результатов генерировать собственные идеи.

пятница, 30 августа 2024 г.

Hattifatteners

Swedish: hattifnattar

Small white ghost-like creatures that resemble worn socks. Hattifatteners are always on the move and travel the sea in large groups (but always in odd numbers), such as boat convoys. They meet every year on a lonely island. Their only goal in life is to reach the horizon. They may communicate using telepathy. The Hattifatteners cannot see very well, but their sense of touch is very strong, and they can feel ground vibrations and electricity. Hattifatteners assemble once a year when they "recharge" in a thunderstorm, when they can cause electrical burns. Hattifatteners grow from seeds, but only if this seed is sown on Midsummer Eve.

среда, 28 августа 2024 г.

sql contents



четверг, 22 августа 2024 г.

Курс матстата

 Основные понятия

  • Случайная величина
  • Плотность распределения и функция распределения
  • Закон распределения
  • Математическое ожидание
  • Дисперсия
  • Какие именно бывают случайные величины
  • Когда используются те или иные распределения случайных величин (их связь с реальностью)
  • Описательные статистики: среднее, дисперсии, медианы и пр.
  • Работа с данными: предобработка, сбор, разведочный анализ, визуализация

 Понятие случайной величины 

  • Распределение дискретной случайной величины
  • Функция распределения дискретной случайной величины
  • Распределение непрерывной случайной величины
  • Функция распределения непрерывной случайной величины
  • Свойства функции распределения случайной величины

Характеристики случайной величины

  • Математическое ожидание
  • Свойства математического ожидания
  • Дисперсия
  • Свойства дисперсии
  • Мода случайной величины
  • Медиана случайной величины
  • Квантиль

Какими бывают случайные величины

  • Распределение Бернулли
  • Биномиальное распределение
  • Геометрическое распределение
  • Распределение Пуассона
  • Експоненциальное распределение
  • Равномерное распределение
  • Нормальное распределение

Описательные статистики и выборки

  • Понятие генеральной совокупности
  • Понятие выборки (случайная выборка, репрезентативная выборка, сратифицированная выборка)
  • independent identically distributed
  • Понятие статистика
  • Выборочное среднее, медиана, дисперсия, перцентиль, квартиль
  • Сравнение теоретических величин и выборочных величин
 

Гистограмма и эмпирическая функция распределения

  • Эмпирическая функция распределения cdf
  • Эмперическая плотность распределения pdf
  • Kernel density estimation на гистограмме
  • Box plot

Зависимые случайные величины

  • определение зависимых и независимых случайных величин
  • Ковариация
  • Свойства ковариации
  • Корреляция Пирсона
  • Корреляция Спирмена (корреляция Пирсона между рангами, определение рангов)
  • Корреляция и причинность

Нормальное распределение и его свойства

  • Математическое ожидание нормального распределения
  • Дисперсия нормального распределения
  • Функция и плотность распределения нормального распределения
  • Стандартное нормальное распределение (центрирование и нормирование)
  • Правила сигм
  • Тяжелые хвосты
  • Эксцесс и Куртосис

Многомерное нормальное распределение

  • Вектор математических ожиданий
  • Ковариационная матрица

Преобразование Бокса-Кокса

  • логарифмирование данных (на примере цен)
  • как избавиться от длинных тяжелых хвостов в данных чтобы применять к данным стандартные методы статистики

Масштабирование и категориальные переменные 

  • Пример рост вес и их размерность
  • Подсчет расстояния между переменными разных размерностей
  • Способы масштабирования
  • Нормализация standard scaler
  • Масштабирование на отрезок [0;1]
  • Устойчивая к выбросам нормализация
  • Категориальные переменные
  • Dummy trap
  • Линейная зависимость и мультиколлинеарность
  • Особенности бинарного кодирования и проклятие размерности

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

  • Хи-квадрат распределение
  • Число степеней свободы для Хи-квадрат распределения
  • Распределение Стьюдента
  • Распределение Фишера

Закон Больших Чисел (ЗБЧ)

  • Собственно теорема
  • Сходимость по вероятности
  • Свойства сходимости по вероятности plim

Центральная Предельная Теорема (ЦПТ)

  • Иллюстрация теоремы на игральных костях
  • Сходимость по распределению
  • Средиземье и Крайнеземье в статистике
  • ЗБЧ vs ЦПТ сравнение формулировок
  • Виды сходимостей (почти наверное, по вероятности, по распределению)
  • Генерация распределений и квантильное преобразование

Схема математической статистики

  • Построение большой карты/схемы для математической статистики
  • Как оценить? (метод моментов, метод максимального правдоподобия)
  • Союзники асимптотические при большом n: ЦПТ и дельта метод
  • Союзники точные: Теорема Фишера, Хи-квадрат, t-статистика, F(n,k)
  • Хорошие свойства: Несмещенность, Состоятельность, Эффективность
  • Пример про деревню Гипотезово

Точечные оценки и метод моментов

  • Точечная оценка параметров неизвестного распределения по выборке
  • Момент 1 порядка и более высоких порядков
  • Использование ЗБЧ

Асимптотические доверительные интервалы

  • Асимптотический доверительный интервал для среднего
  • Длина доверительного интервала
  • Асимптотический доверительный интервал для разности средних
  • Асимптотический доверительный интервал для долей
  • Асимптотический доверительный интервал для разности долей
  • Дельта метод

Хорошие свойства оценок

  • Несмещенность
  • Состоятельность
  • Асимптотическая несмещенность
  • Сравнение оценок, MSE (mean squared error)
  • Несмещенная оценка для среднего и дисперсии
  • Состоятельные оценки для среднего и дисперсии
  • Состоятельность и несмещенность на примерах
  • Дилема: Смещение VS Разброс
  • MSE в виде суммы смещения и разброса Bias-variance decomposition (первое замечательное свойство MSE)
  • Регуляризация
  • Эффективность оценок
  • Неравенство Рао-Фреше-Крамера (второе замечательное свойство MSE)
  • Информация Фишера
  • Проверка некоторых оценок на эффективность (распределение Бернулли и оценка среднего для доли; и для нормального распределения N(mu, 1))

Доверительные интервалы

  • Предсказательный интервал
  • Что такое доверительный интервал
  • Зачем нужны доверительные интервалы
  • Асимптотические доверительные интервалы
  • Почему можно заменить дисперсию на выборочную дисперсию и это ничего не поломает
  • Асимптотический доверительный интервал для дисперсии
  • Точные доверительные интервалы для нормальных выборок (мало наблюдений)
  • Точные доверительные интервалы для нормальных выборок - средние
  • Теорема Фишера
  • Точный VS асимптотический доверительный интервал
  • Когда начинаются большие n (сходимость t-распределения к нормальному при больших n)
  • Точные доверительные интервалы для нормальных выборок - разность средних: случаи когда дисперсии известны, дисперсии неизвестны и равны, дисперсии неизвестны и не равны
  • Нерешенная проблема Беленца-Фишера и приближенное распределение Уэлча
  • Точные доверительные интервалы для нормальных выборок: разность средних для зависимых выборок
  • Точные доверительные интервалы для нормальных выборок: для дисперсии: случаи конда mu известно и неизвестно
  • Точные доверительные интервалы для нормальных выборок: отношение дисперсий
  • Как построить точный доверительный интервал для любого распределения (на примере равномерной выборки)
  • На практике точные доверительные интервалы для разных экстравагантных распределений не строят, а пытаются набрать как можно больше наблюдений и использовать ЦПТ

Проверка гипотез

  • Что такое гипотеза, что значит проверить гипотезу, на примере мартини Джеймса Бонда
  • Уровень значимости
  • Пошаговая процедура проверки гипотезы
  • Нельзя принять нулевую гипотезу (можно опровергнуть или не опровергнуть)
  • Альнатретивная гипотеза
  • P-value
  • Ошибки первого и второго рода
  • Презумпция нулевой гипотезы (и примеры различных формулировок гипотез)
  • Вычисление ошибок 1 и 2 рода для простого критерия
  • Вычисление ошибок 1 и 2 рода для доли
  • Мощность критерия

Какими бывают критерии

  • Параметрические критерии (включают в себя расчет параметров конкретного распределения)
  • Непараметрические (не завазяны на конкретное распределение)
  • Согласия (проверяется гипотеза о виде неизвестного закона распределения)

Параметрические критерии

  • z критерий гипотезы о долях
  • z критерий для разности незваисимых долей
  • z критерий для разности зависимых долей (несколько исследований одной и той же выборки)
  • Гипотезы о средних, z критерий
  • t-критерий для среднего (дисперсия известна, дисперсия неизвестна)
  • Гипотезы о разности средних, z критерий
  • Точные критерии о разности средних: случаи когда дисперсии известны, дисперсии неизвестны и равны, дисперсии неизвестны и не равны
  • Алгоритм подбора критерия:
    • Выборка нормальна?
    • нет: z тест (ЦПТ)
    • да: дисперсия известна?
    • да: z тест (точный)
    • нет: дисперсии равны?
    • да: тест Стьюдента
    • нет: тест Уэлча
    • --- если выборка оказалась маленькой, а данные не нормальны можно использовать непараметрические критерии и процедуру бутстрапа
  • Разность средних для зависимых выборок (исп. одновыборочный критерий стьюдента)
  • Гипотезы о дисперсиях: случаи конда mu известно и неизвестно
  • Тест Фишера для отношения дисперсий

Непараметрические тесты, критерии согласия, бутстрап

  • Непараметрические критерии: критерий знаков
  • Непараметрические критерии: критерий знаков двухвыборочный
  • Непараметрические критерии: ранговые критерии
  • Одновыборочный критерий Уилкоксона
  • Двухвыборочный критерий Уилкоксона
  • Двухвыборочный критерий Манна-Уитни (накладывается ограничение одинаковой формы распределения)
  • Бутстрап и его схема по шагам
  • Доверительный интервал Эфрона
  • Особенности Бутстрапа, Центрирование
  • Доверительный интервал Холла
  • t-процентильный доверительный интервал
  • Проверка гипотез при помощи бутстрапа
  • Проблемы Бутстрапа
  • Какой процент выборки используется при построении бутстрап выборок
  • Эмпирическая функция распределения
  • Несмещенность, состоятельность, асимптотическая нормальность эмпирической функции распределения
  • Критерий Колмогорова (для непрерывных распределений)
  • Расстояние между функциями распределения
  • Теорема Колмогорова (новый союзник)
  • Другие способы подсчета расстояния: критерий Крамера-Мизеса, критерий Андерсона-Дарменга
  • Гипотезы об однородности выборок
  • Критерий Колмагорова-Смирнова
  • Критерий Пирсона (для дискретных распределений, и для непрерывных с оговорками)
  • Гипотезы об однородности выборок на основании критерия Пирсона








понедельник, 12 августа 2024 г.

Reporting attribution model GA4

 https://support.google.com/analytics/answer/10597962?hl=en


An attribution model can be a rule, a set of rules, or a data-driven algorithm that determines how credit is assigned to touchpoints along a user's path to completing important actions.

Reporting attribution model lets you select the attribution model you want to use to attribute credit in your Google Analytics 4 reports and the reports of any linked Firebase projects. Changing the reporting attribution model applies to historical and future data. Learn more Get started with attribution.

Changing the reporting attribution model is reflected in all key event reports and explorations that use event-scoped traffic dimensions, for example, Source, Medium, Campaign, and Default channel group. In Explore, you can view a full list of dimensions that are compatible with attribution. User- and session-scoped traffic dimensions, such as Session source or First user medium, are unaffected by changes to the reporting attribution model.

Note: The first click, linear, time decay, and position-based attribution models are no longer available as of November 2023. Learn more About the deprecated models.

Fractional credit

Based on your selected attribution model, you'll notice changes to the following metrics when used with event-scoped traffic dimensions: Key events, Total revenue, Purchase revenue, and Total ad revenue.

When you switch to a non-last click attribution model, you may notice decimals or "fractional credit" for the first time in these columns. This is because credit for a given key event is distributed between contributing ad interactions according to your selected attribution model.

Example
You select the Linear model. A user follows the path keyword1 > keyword2 and then converts. In this case, each keyword will display 0.5 in the Key events column from that key event.

Channels that can receive credit

see original page

Key event lookback window



Users can trigger key events days or weeks after interacting with your ad.


The conversion window determines how far back in time a touchpoint is eligible for attribution credit. For example, a 30-day conversion window will result in January 30th conversions being attributed only to touchpoints occurring from January 1-30.

The conversion window applies to all attribution models and all conversion types. Changes to the conversion window apply going forward and will be reflected in all reports within your Analytics property.

For Acquisition conversion events (first_open and first_visit), the default conversion window is 30 days. You can switch to 7 days if you have different attribution needs.

For all other conversion events, the default conversion window is 90 days. You can also choose 30 days or 60 days.
Note: The key event lookback window you choose also applies to session attribution.

среда, 10 июля 2024 г.

Множественная проверка гипотез

Ситуация множественного сравнения возникает каждый раз, когда нужно провести несколько параллельных стат-тестов на одном и том же наборе данных.

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

FWER=1(1α)m (family-wise error rate)

 график для α=0.05



FWER напрямую зависит от уровня значимости α и числа проводимых тестов. Чтобы снизить FWER, можно, прежде всего, уменьшить число тестов. Если же число тестов уменьшить нельзя, то аналитику остаётся понизить уровень значимости α. Такую операцию называют коррекцией уровня значимости.

Для чего проводится коррекция уровня значимости. Допустим, Вася сравнивает две пары городов, используя один набор данных: Самару с Владивостоком и Самару с Томском. Вася заранее устанавливает уровень значимости α=0.05. Вася ожидает, что ошибётся в 5% случаев. Но в ситуации множественных сравнений вероятность ошибки будет не 0.05, а FWER=1−(1−α)2=0.0975. То есть Вася может ошибиться не в 5% случаев, как он ожидает, а в 9.75% случаев — почти в два раза чаще. Задача Васи в том, чтобы выбрать такой уровень значимости α, при котором FWER станет равным 0.05.

Поправка Бонферрони

αcorr=α/m

m - количество проводимых тестов
для двух тестов m=2 и уровне значимости в 5% αcorr=0.025:

FWER=1(1αcorr)m = 1(10.025)2=0.05


Метод Шидака

αcorr=1(1α
)
1/m


Метод Холма

метод Холма — итерационный. То есть рассчитывается не единый уровень αα для всех тестов, а новый для каждого из тестов. Формула расчёта уровней коррекции выглядит так



Видно, что коррекция уровня значимости по методу Холма даёт более высокие значения скорректированных уровней значимости, чем при применении методов Бонферрони и Шидака. Это позволяет одновременно и понизить FWER, и повысить мощность теста.



import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

   
# подготавливаем данные
report = pd.DataFrame()
report['m'] = pd.Series([2, 3, 4, 5, 6, 7, 8, 9, 10]) # число тестов
report['alpha'] = 0.05 # исходный уровень значимости

# считаем поправки
report['Метод Бонферрони'] = report['alpha'] / report['m'] 
report['Метод Шидака'] = 1 - (1 - report['alpha']) ** (1 / report['m'])

# рассчитываем поправку Холма
def holm_correction(row):
    m, alpha = int(row['m']), row['alpha'] # число тестов и уровень значимости
    result = []
    for i in range(m): # получаем номер текущего теста и считаем коррекцию 
        result += [alpha / (m - i)]
    return result

# поскольку поправка Холма возвращает много результатов - возьмём среднее по ним
report['Поправки Холма'] = report.apply(holm_correction, axis=1)
report['Средний ур. знач. при поправке Холма'] = report['Поправки Холма'].apply(np.mean) # считаем средний уровень значимости с учётом поправки Холма
print(report)

# строим график
report.set_index('m')[['Метод Бонферрони', 'Метод Шидака', 'Средний ур. знач. при поправке Холма']].plot(grid=True)
    
# подписываем оси
plt.xlabel('Число тестов'), plt.ylabel('Уровень значимости')
plt.legend(title = 'Метод коррекции'), plt.title('Скорректированные уровни значимости')
plt.show()

На практике чаще всего применяют коррекцию Бонферрони — из-за простоты, но можно применять и коррекцию Холма, поскольку она более «щадящая» по отношению к мощности теста. 

Cкорректированный уровень значимости стремится к 0. Например, если посчитать коррекцию методом Бонферрони для 1000 тестов, то получится, что уровень значимости должен быть равен 0.00005. 

На практике это означает, что с таким низким уровнем значимости мы практически всегда будем оказываться в ситуации, когда нулевая гипотеза не отвергается и, возможно, будем совершать частые ошибки второго рода (то есть пострадает мощность теста). Это может произойти даже при коррекции для десяти сравнений и выше.

Казалось бы, кому может понадобиться проводить десятки, сотни или даже тысячи тестов? Но такие ситуации в бизнесе возникают довольно часто. Например, маркетологи могут сравнивать одновременно десятки и сотни рекламных кампаний, а генетики — проводить тысячи одновременных генетических тестов. В таких ситуациях коррекции Бонферрони и Шидака (и даже их более продвинутые аналоги) не смогли бы помочь.

Чтобы справиться с этой проблемой, придумали специальные тесты для множественного сравнения гипотез:
  • ANOVA — аналог t-теста для ситуаций сравнения трёх и более выборок;
  • χ2-тест (читается «хи-квадрат») на независимость для сравнения пропорций, долей и шагов воронок — аналог z-теста для пропорций. Обратите внимание, что существует целое семейство тестов χ2, использующихся для самых разных целей. Для сравнения пропорций используется только тест на независимость (test of independence/association);
  • Тест Краскела-Уоллиса — аналог теста Манна-Уитни для ситуации множественных сравнений. С тестом Манна-Уитни вы познакомитесь в следующей теме.

вторник, 9 июля 2024 г.

Ошибки 1ого и 2ого рода

 


Уровень статистической значимости — это вероятность случайно получить в реальном наблюдении значение, далёкое от предполагаемого в нулевой гипотезе.

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

Такая ошибка называется ошибкой первого рода, или ложнопозитивным результатом статистического теста. Это означает, что различий между сравниваемыми группами нет, но тест показал p-value меньше уровня значимости. Получается, есть основания отвергнуть H₀. Так, вероятность ошибки первого рода равна уровню значимости α.

Ошибка второго рода — ложнонегативный результат. Он указывает, что различия между группами есть, но тест показал p-value больше уровня значимости α и нет оснований отвергать H₀. Если обозначить вероятность ошибки второго рода как β, то параметр 1 - β будет называться мощностью статистического теста. Раз β — вероятность ошибиться, то 1 - β — вероятность не ошибиться, то есть правильно отклонить нулевую гипотезу, когда она неверна.

Мощность и значимость теста связаны напрямую: чем больше один из этих показателей, тем больше и другой. Предпочтительнее иметь малую значимость и большую мощность теста. Приходится искать баланс, и стандартные значения значимости в 5% и 1% — типичные решения этой задачи.

Пример: Если увеличить уровень статистической значимости теста с 0.01 до 0.05, то вероятность ошибки первого рода увеличится, а второго рода уменьшится.

воскресенье, 7 июля 2024 г.

Приоретизация гипотез

  • срочно / не срочно; важно / не важно (Матрица Эйзенхауэра — способ приоритизации, в котором задаче присваивают два свойства: важность и срочность)
  • Weighted Shortest Job First = (User-Business Value + Time Criticality + Risk Reduction or Opportunity Enablement) / Job Duration
  • RICE = (reach * impact * confidence) / efforts
при правильной оценке показателей (обычно берут 10 бальную шкалу или ряд Фибоначчи) оценки дают одинаковый или близкий порядок следования гипотез

reach - часто дружит с анкетированием
impact - часто дружит с UX исследованием и интервью
confidence - зависит от уверенности в оценке reach и impact
efforts - чем больше сотрудников процессов и времени задействовано, тем выше оценка

ICE, RICE, WSJF - считаются фреймворками :0

Определение важных метрик

Как правило, большинство задач по поиску опережающих метрик и декомпозиции уже выполнил кто-то до вас (в компании или best practicies на рынке)

Модели:
  • продуктовые
  • маркетинговые
  • финансовые модели
Опережающие метрики могут быть найдены из анализа:
  • доходов и расходов
  • маркетинговой и продуктовой воронки
  • когорт и юнит-экономики
  • пользовательских метрик
а так же:
  • при анализе стейкхолдеров
  • при анализу P&L
  • User jorney, UX, интервью с пользователями
  • список не исчерпывающий

Пример анализа стейкхолдеров e-comm

  • Инвесторы, владельцы
    • Рост стоимости бизнеса, увеличение дивидендов
    • Метрики: Выручка, прибыль
  • Chief executive officer
    • KPI от владельцев по росту выручки, прибыли
    • Метрики: Темпы роста выручки, прибыли
  • Chief marketing officer
    • Рост выручки, увеличение маркетингового бюджета
    • Метрики: Маркетинговый бюджет, ROMI, выручка
  • CTO
    • Стабильная работа продукта, бюджет разработки
    • Метрики: downtime&bugs, объем выполненных задач
  • Пользователи
    • удобство продукта, ценность, стоимость использования
    • ROI продукта, экономия времени, количество запросов в поддержку, удельное количество часов, потраченных на поддержку клиента
Отчет P&L из годового отчета Яндекс
image

P&L полезен руководителям компании, потому что:
  • Содержит информацию обо всех доходах и расходах компании. Включает платежи, которые нужно исполнить или получить по договору с отсрочкой.
  • Информация в P&L предоставляется за период, а не по состоянию на конкретную дату.
  • Имеет стандартную структуру. Её шаблоны для разных видов бизнеса легко найти.
  • Структура P&L уже декомпозирована на траты по направлениям деятельности подразделений и отделов. Это позволяет рассчитать юнит-экономику с минимальными дополнительными вычислениями.

понедельник, 24 июня 2024 г.

Основные бизнес показатели

  • Оборот или выручка - это сумма платежей полученных от клиентов (за период)
  • Себестоимость (товаров и/или услуг) - деньги которые компания тратит на производство или закупку товаров или услуг (сюда могут входить затраты на расходные материалы, станки топливо)
  • Валовая прибыль = Выручка - Себестоимость. Если валовая прибыль отрицательна это плохой знак, однако она таковой может быть в случае распродаж (для освобождения складов) или с целью занятия доли рынка с целью дальнейшего получения прибыли на сервисах или поддержке
  • Валовая маржинальность = Валовая прибыль / Выручка
  • Операционные расходы - это расходы связанные с основной деятельностью компании, выплата зарплат, аренда помещений, электричество и интернет, маркетинг
  • Операционная прибыль = Валовая прибыль - Операционные расходы. Если операционная прибыль отрицательна это операционный убыток. Операционный убыток может быть допустим если компания реинвестирует все доступные средства в свое развитие и рост. Некоторые компании могут получать операционный убыток десятилетиями.
  • Операционная маржинальность = Операционная прибыль / Выручка. Это доля выручки, которая остается в компании после вычета себестоимости, зарплат, аренды, маркетинга и других расходов, связанных с основной деятельностью.
  • Чистая прибыль = Операционная прибыль - налоги и кредиты. Все затраты компании — себестоимость, операционные расходы и обязательства перед государством и кредиторами — учитывает показатель чистой прибыли. Это именно та сумма, которую владельцы бизнеса могут забрать себе, выплатить акционерам или реинвестировать в развитие компании. Точную чистую прибыль можно посчитать только в конце года, когда известны все обязательства по налогам и кредитам, поэтому в ежедневном управлении компанией обычно опираются на валовую и операционную. Отрицательная чистая прибыль называется чистым убытком.

 


Но это еще не все чтобы создать бизнес нужны первоначальные затраты на его организацию, настройки систем, заключение первоначальных договоров и пр. Все это стоит денег (и времени), а продажи еще не начались. Т.е. стартап обычно начинается не из "точки ноль", а из убытков, постепенно компенсируя их будущими продажами. Для инвесторов главная метрика это ROI.

  • ROI = (Чистая прибыль - Инвестиции) / Инвестиции. ROI на старте = -1 т.к. чистая прибыль по началу = 0
Возврат на инвестиции считают не только для всего бизнеса, но и для его составляющих — в том числе маркетинга. Чтобы не путать окупаемость бизнеса с окупаемостью маркетинга, ROI рекламной кампании называют возвратом на инвестиции в маркетинг — ROMI.

  • ROMI = (Валовая прибыль от рекламной кампании - затраты) / затраты. На практике часто пользуются упрощенной формулой ROMI рекламной кампании = Валовая прибыль от этой кампании / Затраты. При расчёте ROMI по сокращённой формуле точка окупаемости будет не в ROMI = 0%, а в ROMI = 100%. Такое значение ROMI показывает, что затраты окупились на 100%.



Опережающие метрики - показатели, изменение которых напрямую влияет на основную метрику бизнеса (приведены выше). Это м.б. CAC/LTV или конверсия или еще какая-то выявленная метрика (например количество связей на пользователя в социальной сети, которые оказывают влияние на удержание). Некоторые игроки на рынке создают целые экосистемы взаимосвязанных сервисов для удержания пользователей.

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

Декомпозировать метрики можно и нужно разными способами, например:

  • выручка = средний чек покупки * кол-во покупок
    • кол-во покупок = число привлеченных пользователей * конверсия
  • выручка = число привлеченных пользователей * средний доход с одного привлеченного пользователя RPV (revenue per visitor, revenue per user)
    • число привлеченных пользователей = затраты на привлечение / CAC
На практике редко можно повлиять на одну метрику и не затронуть другую т.к. они взаимосвязаны. Например привлекая больше новых пользователей может измениться CAC а так же RPU,

Что нужно сделать, чтобы выбрать опережающие метрики?

  • декомпозировать основную метрику бизнеса несколькими способами
  • проверить корреляцию основного показателя бизнеса и выбранных опережающих метрик
  • изучить best practices отрасли


четверг, 30 мая 2024 г.

Some words about server container GTM

 https://business.reddithelp.com/helpcenter/s/article/Set-Up-a-Web-Container

With a client-side GTM setup, you can track tags in your website's code. Plus, it makes it simpler to handle consent, so it’s easier to follow the rules and respect what users want with their data.

However, potential limitations like browser-based privacy measures or ad-blocking extensions can impact data collection accuracy. Server-side tagging can potentially mitigate client-side measurement blocking.

Learn how to integrate your web container into the server container - https://business.reddithelp.com/helpcenter/s/article/Set-Up-a-Server-Container

A server container reduces inaccuracies by avoiding client-side 3rd-party blocking, like browser-based privacy measures or ad-blocking extensions. On top of that, it lets you establish consent management mechanisms, ensuring your data collection practices align with regulatory requirements and user preferences.

While setting up a server GTM container improves the reliability and consistency of conversion metrics, the setup process can be a little complicated. We suggest reaching out to developers if you're unsure and giving the setup a good test run to ensure it’s working as best as it can.

https://business.reddithelp.com/helpcenter/s/article/event-deduplication

Replace some href with GTM example

<script>

var chnglinks = document.querySelectorAll('a[href="/"]');

var currentUrl = window.location.href;

chnglinks.forEach(function(link){

    link.setAttribute("href", currentUrl);

});

</script>

воскресенье, 12 мая 2024 г.

Git cложное слияние

http://uneex.org/LecturesCMC/PythonDevelopment2023/04_MergetoolCommandline

https://youtu.be/uVh3BEL1iyU

Вообще merge commit опасная штука, их плодить не надо т.к. могут быть конфликты, когда редактируется одно и то же место, которое правится вручную при merge commit

Сложное слияние

При merge и rebase могут возникать конфликты: в двух историях изменён один и тот же контекст: 

  • Создадим заведомо конфликтующий коммиты на двух ветках 
    $ git init
    Initialized empty Git repository in /home/george/example/.git/
    $ git add .
    $ git commit -a -m "Initial commit"
    [master (root-commit) 8ab1be9] Initial commit
     1 file changed, 63 insertions(+)
     create mode 100644 keyword.py
    $ git branch second
    $ git branch
    * master
      second
    $ grep -Ev "except|False" /usr/lib64/python3.10/keyword.py > keyword.py
    $ git diff
    diff --git a/keyword.py b/keyword.py
    index cc2b46b..9f30ffb 100644
    --- a/keyword.py
    +++ b/keyword.py
    @@ -16,7 +16,6 @@ Alternatively, you can run 'make regen-keyword'.
     __all__ = ["iskeyword", "issoftkeyword", "kwlist", "softkwlist"]
    
     kwlist = [
    -    'False',
         'None',
         'True',
         'and',
    @@ -31,7 +30,6 @@ kwlist = [
         'del',
         'elif',
         'else',
    -    'except',
         'finally',
         'for',
         'from',
    $ git commit -a -m "False+except"
    [master f1fbdeb] False+except
     1 file changed, 2 deletions(-)
    $ git checkout second
    Switched to branch 'second'
    $ grep -Ev "finally|yield" /usr/lib64/python3.10/keyword.py > keyword.py
    $ git diff
    diff --git a/keyword.py b/keyword.py
    index cc2b46b..251bd3a 100644
    --- a/keyword.py
    +++ b/keyword.py
    @@ -32,7 +32,6 @@ kwlist = [
         'elif',
         'else',
         'except',
    -    'finally',
         'for',
         'from',
         'global',
    @@ -50,7 +49,6 @@ kwlist = [
         'try',
         'while',
         'with',
    -    'yield'
     ]
    
     softkwlist = [
    $ git commit -a -m "finally+yield"
    [second 0804e39] finally+yield
     1 file changed, 2 deletions(-)
    $ git log --graph --pretty=oneline --abbrev-commit --all
    * 0804e39 (HEAD -> second) finally+yield
    | * f1fbdeb (master) False+except
    |/
    * 8ab1be9 Initial commit
    
    
  • Итак, у нас есть три состояния файла keyword.py

    1. 8ab1be9 (общий предок) 

    2. f1fbdeb (на ветке master) — без False и except

    3. 0804e39 (на ветке second) — без finally и yield

  • Контекст изменений для except и finally пересекается 

    • ⇒ при слиянии будут конфликты 
  • Попробуем объединить: 
       1 $ git branch
       2   master
       3 * second
       4 $ git merge master
       5 Auto-merging keyword.py
       6 CONFLICT (content): Merge conflict in keyword.py
       7 Automatic merge failed; fix conflicts and then commit the result.
       8 $ grep -EC3 "<<<<|====|>>>>" keyword.py
       9     'del',
      10     'elif',
      11     'else',
      12 <<<<<<< HEAD
      13     'except',
      14 =======
      15     'finally',
      16 >>>>>>> master
      17     'for',
      18     'from',
      19     'global',
      20 
    
  • Часть изменений применены (про False и про yield), потому что контексты не пересекались, часть (про except и finally) — нет. 

  • Файл содержит вставки вида: 
    <<<<<<< HEAD
    =======
    >>>>>>> master
  • Это т. н. 3-way diff по схеме «общий предок + конфликтующие изменения» 
    • Все неконфликтующие изменения из обеих веток применены 

    • HEAD — это содержимое текущей ветка, master — с чем мержим 

      • {1} было бы неплохо ещё знать, что раньше-то было, но тут не показывается 

    • Все "<<<<<<<""=======" и ">>>>>>>" надо убрать (и ненужные изменения тоже) 

    • Получится merge commit с изменением, неравным тому, что делалось на ветках 
  • Если вас удовлетворяют изменения, проделанные на ветке master, можно просто git checkout master keyword.py<!> но тогда пропадут все изменения, включая уже применённые

  • Когда всё готово, делаем git commit -a

   1 $ vim keyword.py
   2 
   3 $ git commit -a
   4 [second 6568682] Merge branch 'master' into second
   5 $ git log --graph --pretty=oneline --abbrev-commit --all
   6 *   6568682 (HEAD -> second) Merge branch 'master' into second
   7 |\
   8 | * f1fbdeb (master) False+except
   9 * | 0804e39 finally+yield
  10 |/
  11 * 8ab1be9 Initial commit
  12 
  • Если в историях больше одного коммита, merge надо продолжить с помощью git merge --continue

  • Если вы окончательно запутались (особенно в многокоммитных мержах), всё можно откатить назад с помощью git merge --abort



    Mergetool

    Инструмент, в котором есть {1} , имеет общее название «merge tool». 

    • Список: git mergetool --tool-help

    • Запускается вместо ручного исправления конфликтов 
    • *vimdiff показывает четыре окна: 

      • «Эта» ветка (LOCAL) 

        Общий предок (BASE) 

        «Та» ветка (REMOTE)

        Файл с конфликтами (его и надо исправлять)

      • Могут остаться backup-файлы, их надо удалить git clean -f

    • Другие утилиты позволяют «накликивать» изменения) 

    Пример на том же репозитории: 

    • просто удалим merge-коммит (git reset --hard HEAD~

    • вызовем git merge

    • вызовем git merge-tool --tool=gvimdiff (или meld)

      • :diffget RE  " get from REMOTE
        :diffget BA  " get from BASE
        :diffget LO  " get from LOCAL

    Для постоянного вызова правильного mergetool: 

    • $ git config --global merge.tool ваш_mergetool