Simulative – Telegram
7.37K subscribers
1.71K photos
71 videos
1 file
1.27K links
Привет! Мы — образовательная платформа в сфере аналитики Simulative: simulative.ru

Создаём курсы-симуляторы, где обучаем не на «апельсинках», а на кейсах из реального бизнеса.

Наш уютный чат: @itresume_chat
Поддержка: @simulative_support
Download Telegram
🔥 Тестовое какой компании будем разбирать на вебинаре?
Anonymous Poll
43%
СБЕР
46%
Ozon
11%
Пятерочка
🔥6👍21
📊 Работа с пропущенными данными. Часть 2

А мы продолжаем обсуждение методов работы с пропущенными данными. Снова работаем с таблицей об автомобилях (см. под постом).

Замена пропущенных значений средним


Итак, один из стандартных методов - замена пропущенных значений средним значением по переменной.

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

# Замена NaN средними значениями
df['Цена'].fillna(df['Цена'].mean(),
inplace=True)
df['Год'].fillna(
int(df['Год'].mean()),
inplace=True)


Но что, если эти значения нельзя усреднить, как в случае с категориальными переменными?

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

# Замена пропущенных значений модой
mode=df['Топливо'].mode()[0]
df['Топливо'].fillna(mode,
inplace=True)


Результат замены смотрите под постом 👇

Самое часто встречающееся значение - Бензин, на него и заменилось пропущенное значение.

Оставить пропуски без изменений

В некоторых случаях оставление пропущенных данных без изменений тоже будет полезным.

🔹 Если пропущенные значения возникли случайно и не имеют системного характера, их можно оставить, если они не влияют на анализ.

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

🔹 Оставление пропущенных данных может служить сигналом о недостоверности данных, что может стимулировать дополнительный анализ.

🔹 Замена пропущенных значений может исказить структуру данных. Например, замена средним значением может создать ложное представление о распределении.

🔹 В некоторых случаях пропущенные значения важны для контекста данных, особенно в анализе текста или текстовых данных.

🔹 Замена пропущенных значений может потребовать дополнительных вычислений и ресурсов, а оставление данных без изменений может быть более эффективным.

Но при оставлении пропущенных данных важно понимать, как это влияет на анализ, и иногда требуется дополнительное исследование влияния пропусков на результаты анализа.

Конечно, каждая ситуация уникальна, и к ней следует относиться по-разному. Тем не менее, мы рассмотрели самые типичные варианты решения проблемы пропущенных данных, пользуйтесь!
_ _ _ _ _ _ _ _

А если хотите полностью прокачать свои навыки работы в Pandas, то присоединяйтесь к нашему бесплатному курсу!

Это часть нашей полноценной обучающей программы — Симулятора "Аналитик данных" — мы собрали здесь самое лучшее для вашего обучения:

🔸 задачи из реальной практики (провести многомерный ABC-анализ, XYZ-анализ, рассчитать динамику продаж и т.д.)
🔸 самые азы и подвинутые функции (сложная агрегация, оконные функции и т.д.)
🔸 итоговый проект (сделаете ваш первый кейс и добавите к себе в портфолио!)

Вы готовы бустануть свои знания и навыки в работе с Pandas? 😉

🔗 Ждем вас на бесплатном курсе — ссылка
👍10🔥6
🔥 Использование frame_exclusion в оконных функциях PostgreSQL

frame_exclusion - это дополнительная опция для оконных функций в PostgreSQL, позволяющая более гибко управлять оконными рамками.

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

Давайте рассмотрим пример использования frame_exclusion.

У нас есть таблица orders с данными о заказах клиентов. Мы хотим рассчитать кумулятивную сумму заказов для каждого клиента, исключая из вычислений текущий заказ. Тогда код будет выглядеть так:

SELECT
client_id,
order_date,
order_amount,
SUM(order_amount) OVER (
PARTITION BY client_id
ORDER BY order_date
ROWS BETWEEN UNBOUNDED
PRECEDING AND 1 PRECEDING
EXCLUDE CURRENT ROW
) AS cumulative_amount
FROM orders;


Разберемся, что мы делаем?

1. Мы выбираем данные о клиентах, датах заказов и суммах заказов из таблицы orders.

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

3. PARTITION BY разделяет данные на разделы (группы) по client_id.

4. ORDER BY устанавливает порядок сортировки заказов по order_date.

5. ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING определяет оконную рамку, включая все строки, начиная с первой строки и заканчивая строкой перед текущей строкой.

6. И, наконец, EXCLUDE CURRENT ROW исключает текущую строку из окна, что позволяет нам исключить текущий заказ из вычисления кумулятивной суммы.

Еще frame_exclusion может быть полезной, например, в таких задачах:

Вычисление средней цены акций без учета выбросов

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

Определение времени простоя оборудования

Вы анализируете данные по времени простоя оборудования в производстве с учетом перерывов в работе менее 30 минут. Чтобы исключить перерывы, как раз понадобится frame_exclusion.

Еще больше примеров разбираем у нас в Симуляторе "Аналитик данных" 🔥

🕵️ Если хотите посмотреть, как устроена наша флагманская обучающая программа изнутри и понять, как вы можете бустануть свою карьеру в аналитике на реальных бизнес-кейсах, то записывайтесь на индивидуальную бесплатную экскурсию!

#sql
👍10🔥52😁1
🧾Порядок операций в SQL и место оконных функций в этом порядке

При написании SQL-запросов важно знать, в каком порядке выполняются различные операции. Вот порядок выполнения подзапросов SQL:

1. FROM / JOINS
Здесь задаются источники данных, включая таблицы и объединения (JOIN), которые используются в запросе.

2. WHERE
На этом этапе выполняется фильтрация данных. Строки, которые не соответствуют условиям, исключаются из результирующего набора.

3. GROUP BY
Если есть группировка (GROUP BY), данные группируются по указанным столбцам.

4. Агрегирующие функции
Выполняются агрегирующие функции, такие как SUM, COUNT, AVG, и другие, над данными в группах.

5. HAVING
Здесь применяются условия к группам данных, и группы, которые не соответствуют условиям, исключаются.

6. Оконные функции
Оконные функции вычисляются на этом этапе. Оконные функции позволяют выполнять вычисления по группам строк в окне, определенном с помощью PARTITION BY и ORDER BY.

7. SELECT
Выбираются столбцы для включения в результирующий набор.

8. DISTINCT
Если используется ключевое слово DISTINCT, дубликаты удаляются из результирующего набора.

9. UNION / INTERSECT / EXCEPT
Если используются операторы UNION, INTERSECT, EXCEPT, объединяются результаты запросов.

10. ORDER BY
Здесь определяется порядок сортировки строк в результирующем наборе.

11. OFFSET
Если используется оператор OFFSET, пропускаются указанное количество строк.

12. LIMIT / FETCH / TOP
Здесь ограничивается количество возвращаемых строк.

☝️🧐Важно отметить, что оконные функции (оконные агрегаты) вычисляются на шестом этапе, что означает, что нельзя использовать их в операторе WHERE (который вычисляется на втором этапе). Однако, можно обойти это ограничение, используя общий запрос (CTE - common table expression), где можно вызывать оконные функции и сохранять их результаты как столбцы в CTE. CTE рассматривается как таблица, и результаты оконных функций будут оцениваться оператором WHERE как обычные значения столбцов .
_ _ _ _ _ _ _ _ _

А вы хотите научиться правильно писать SQL-запросы и работать с оконными функциями?

В программе Симулятора "Аналитик данных" есть целый модуль, посвященный SQL, куда входит изучение операторов, подзапросов, агрегаций и оконных функций на реальных кейсах и задачах из бизнеса.

👉🏻 Выбрать тариф вы можете на сайте по ссылке: ссылка
🔥21👍6
🪄 Волшебство магических методов в Python

В мире Python существуют методы, которые называются "магическими", потому что они позволяют определить специальное поведение объектов. Эти методы работают скрыто, но оказывают огромное влияние на наш код.

Один из первых магических методов, с которым мы сталкиваемся - это __init__. Он вызывается при создании нового объекта класса и позволяет инициализировать атрибуты объекта.

class Cat:
def __init__(self, name):
self.name = name

def __str__(self):
return f"Я кот {self.name}"

cat = Cat("Буся")
print(cat)
# Я кот Буся

Здесь мы создали класс
Cat и определили метод __init__, который принимает аргумент name и устанавливает его в атрибут name.

Мы также переопределили метод __str__, чтобы получать информативное строковое представление объекта при его выводе.

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


Еще одним распространенным магическим методом является __repr__. Он похож на __str__, но предназначен для возвращения представления объекта, которое можно использовать для его точного воссоздания. Обычно используется для отладки и представления объектов в консоли.

class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __repr__(self):
return f"Point({self.x}, {self.y})"

point = Point(2, 3)
print(point) # Point(2, 3)


Здесь класс Point представляет точку на плоскости, и метод __repr__ возвращает строку, содержащую код для создания точки, что точно пригодится для отладки.

Магические методы играют важную роль и при сравнении объектов операторами сравнения ( ==, <, >). Для каждого из таких операторов есть свой магический метод.

class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height

def __eq__(self, other):
return self.width == other.width and self.height == other.height

def __lt__(self, other):
return self.area() < other.area()

def area(self):
return self.width * self.height

rect1 = Rectangle(4, 5)
rect2 = Rectangle(4, 5)
rect3 = Rectangle(3, 6)

print(rect1 == rect2) # True
print(rect1 < rect3) # False


В этом примере мы переопределили метод __eq__, чтобы сравнивать два прямоугольника на основе их ширины и высоты, и метод __lt__, чтобы сравнивать их по площади.

Кроме сравнения, магические методы также используются:

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

Также магические методы позволяют контролировать процесс сериализации и десериализации объектов и многое другое.

Магические методы в Python предоставляют мощные возможности для определения поведения объектов и помогают создавать чистый и читаемый код. Пользуйтесь ими с умом! 🎩🐍

#python
10🔥6😢2👍1
Стрим по SQL: Решение задач повышенной сложности 🔥

Недавно мы проводили стрим и решали задачи повышенной сложности по SQL, которые вызывали затруднение более чем у 500 человек 😱

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

🔗 Чтобы получить запись стрима, просто перейдите по ссылке
🔥17👍32
Ошибка в SQL - не использовать COALESCE 🔥

COALESCE - это оператор, который принимает несколько значений и возвращает первое, которое не является NULL. Если все значения NULL, он вернет NULL.

COALESCE полезен, чтобы избежать случайных пропусков в вычислениях. Такие пропуски могут быть трудно заметить, особенно при вычислении средних значений на основе большого набора данных. Обычно пропуски заполняют средними, минимальными, максимальными, медианными или средними значениями, или с использованием интерполяции - это зависит от задачи.

Давайте рассмотрим пример из реального бизнеса. У нас есть таблица клиентов (clients), и в поле name хранятся имена пользователей.

Отдел маркетинга решил создать email-рассылку, начинающуюся с фразы: "Приветствуем, имя_пользователя!" Однако, если поле name содержит NULL, фраза становится "Приветствуем, !". Сами представляете выражение лица клиента, когда ему приходит такое письмо…

В таких случаях COALESCE может прийти на помощь:

SELECT COALESCE(name, 'Дорогой друг') 
FROM clients


Совет: Всегда лучше перестраховаться, особенно при вычислениях и агрегировании данных, где любая ошибка может быть незаметной, но существенной. Лучше подстелить "соломку" для безопасности.

✔️ Хотите стать крутым аналитиком данных? Приглашаем вас на персональную экскурсию в Симулятор - мы расскажем, как это сделать: simulative.ru/excursion

#sql
🔥11🤩63👍3
3 полезных функции для работы с Pandas 🔥

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

Сегодня мы рассмотрим несколько очень удобных, но при этом неочевидных методов Pandas: stack, set_option, insert.

Для начала создадим таблицу, которая содержит название города, среднюю температуру в °C, скорость ветра в м/с

import pandas as pd
multi_col = pd.MultiIndex.from_tuples(
[('Temperature', '°C'),
('Wind', 'm/s')])

df = pd.DataFrame(columns=multi_col,
index=['Тюмень','Москва','Краснодар'],
data=[[5, 2], [10, 5], [20, 1]])



1️⃣ STACK


Давайте теперь переформатируем эту таблицу так, чтобы строки были разбиты не только по городам, но еще и по типу измерения (Температура/Скорость ветра).

По столбцам будут единицы измерения, а в ячейках таблицы - соответствующие значения.

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

В stack есть параметр level - уровни стекинга. Список «уровней», которые мы хотим перекинуть с оси столбцов на ось индекса. Например, если передать только 0 уровень, то в ось индекса попадут Типы измерений.

df.stack(level = 0)


Если же передать список уровней [0, 1], то все уровни с оси столбцов перейдут в индекс.

df.stack(level = [0, 1])


2️⃣ SET_OPTION


Каждый раз при просмотре большого датафрейма приходится писать df.head(5), чтобы вывести только первые строки!


Знакомая ситуация? Думаем, да.

Чтобы сделать работу с Pandas более приятной и избавиться от дубляжей в коде, можно воспользоваться методом set_option. Он позволяет заменить стандартные настройки Pandas на свои кастомные, настроив отдельные аспекты под себя.

Для начала рекомендуем прописать все необходимые конфигурации. Например:

display_settings = {
# max кол-во столбцов для отображения
'max_columns': 10,
# max кол-во строк для отображения
'max_rows': 1,
# количество цифр знаков после запятой
'precision': 0,
# отображение полного размера датасета
'show_dimensions': True
}


После этого устанавливаем настройки с помощью set_option:

for op, val in display_settings.items():
pd.set_option("display.{}".format(op), val)


В таком случае выведется только 1 строка, нет цифр после запятой и присутствует полный размер датасета (внизу).

Все как заказывали 😄

Примечание: Чтобы отменить настройки, используйте reset_option:

pd.reset_option("all", silent = True)


3️⃣ INSERT


Еще одна знакомая до боли задача:

Добавить новый столбец в середину или начало существующего датафрейма.


Зачастую эту задачу решают так:

- Создают новую колонку
- Добавляют в нее данные
- Сортируют вручную столбцы датафрейма в нужном порядке

Этого всего можно избежать, использовав метод insert. Он позволяет добавлять столбец в определенном месте, используя индекс столбца.

Например, добавим новый столбец Скорость ветра в км/ч в самое начало нашего датафрейма:

df.insert(0, ('Wind_km', 'km/h'),
df[('Wind', 'm/s')]/1000*3600)

Все результаты команд смотрите в карточках под постом!)

Хотите прокачать свои навыки на реальных бизнес-кейсах? Записывайтесь на наш бесплатный курс по Pandas: simulative.ru/pandas

#python #pandas
👍14🔥73
14
Приглашаем на персональную эксурсию в Симулятор 🔥

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

Тогда вместо часа чтения обучающих статей и просмотра видео проведите этот час с нами в Симуляторе «Аналитик данных»!

Мы сапожники с сапогами: наша команда несколько раз с нуля отстраивала аналитику в крупных компаниях, а сейчас мы строим сразу несколько data-driven компаний - нам есть, чем вас удивить!

За час в формате персонального созвона в Google Meet мы вам покажем и расскажем:

- Как выглядит идеальное портфолио (на примере реальных людей)
- Как выстроить обучение, чтобы максимально быстро устроиться аналитиком (даже с нуля)
- Почему SQL и Python - не основной навык аналитика


🔗 Чтобы записаться на персональную экскурсию прямо сейчас, просто перейдите по ссылке: simulative.ru/excursion
🔥42👍2
🔥 Долой длинные строки в Python

Во время код-ревью мы часто сталкиваемся с длинными строками кода, которые даже не влезают в экран. И казалось бы - они содержат настолько «стройную» информацию, что даже не знаешь, где (и зачем) поставить перенос на следующую строку.

Вот несколько случаев, где это встречается особенно часто:

* Длинные строки
* Большое количество аргументов в функции
*
method chaining в Pandas

Рассмотрим такой «длинный» код на примере Pandas. Согласитесь, выглядит жутко:

df = coderun[coderun["cohort"] >= "2022-01"].
groupby(["cohort", "language", "user_id"])["problem_id"].agg("nunique").
groupby(["cohort", "language"]).agg(np.mean).reset_index().pivot_table(
values="problem_id", columns=["language"], index=["cohort"])


А теперь давайте приведем код в порядок. Есть, как минимум, два метода борьбы с такими ситуациями.

🔵 Перенос строки с помощью обратного слеша


Достаточно поставить в конце строки обратный слеш и Python будет воспринимать весь написанный код как единую строку.

df = coderun[coderun["cohort"] >= "2022-01"] \
.groupby(["cohort", "language", "user_id"])["problem_id"] \
.agg("nunique") \
.groupby(["cohort", "language"]) \
.agg(np.mean) \
.reset_index() \
.pivot_table(values="problem_id", columns=["language"], index=["cohort"]


Сами видите - код стал в разы более читаемым и даже компактным.

🔵 Оборачивание круглыми скобками

Прием заключается в том, что мы просто оборачиваем все выражение в круглые скобки и это тоже рассматривается Python как одна строка кода.

df = (
coderun[coderun['cohort'] >= '2022-01']
.groupby(['cohort', 'language', 'user_id'])['problem_id']
.agg('nunique')
.groupby(['cohort', 'language'])
.agg(np.mean)
.reset_index()
.pivot_table(values='problem_id', columns=['language'], index=['cohort'])
)


На наш взгляд, этот вариант даже лучше - нет лишних символов и код выглядит еще более аккуратным.

- - - - -

Записывайтесь на наш бесплатный курс по Pandas: simulative.ru/pandas , чтобы прокачать свои навыки на реальных бизнес-кейсах!

#python #pandas
🔥22👍83
Кейс по SQL: Анализ продаж аптечной сети 🔥

Абсолютно любой бизнес сталкивается с потребностью расчета продуктовых метрик - ARPPU, LTV, Lifetime и другие. Если бизнес их не считает и не улучшает - он умирает. Поэтому навык расчета этих метрик в SQL для любого аналитика - абсолютный must have.

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

Скорее смотрите, чтобы не пропустить!

👉[ПОСМОТРЕТЬ КЕЙС]👈
7👍5🔥3
Собираем портфолио аналитика: когортный анализ LTV в SQL 🔥

Приглашаем вас на интенсив, где мы в прямом эфире будем проводить когортный анализ LTV в SQL на примере бонусной системы 🚀

📅 Дата и время: 13 декабря, 19:00 по Мск
🕘 Спикер: Андрон Алексанян, CEO Simulative / IT Resume


🔗 Ссылка для записи на интенсив: [ссылка]

По итогу интенсива вы:

- Глубоко разберетесь с LTV и механикой когортного анализа
- Научитесь писать красивый SQL-запрос для проведения когортного анализа
- Сформулируете бизнес-выводы на основании анализа
- Упакуете впечатляющий кейс в портфолио


Интенсив подойдет всем — от новичков и до тех, кто уже знаком с SQL и аналитикой.

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

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

🔗 Ссылка для записи на интенсив: [ссылка]
👍6🔥42
🔥 Продуктовая метрика LIFETIME

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

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

Это как раз показатель востребованности продукта, заинтересованности юзеров и, более того, «гарантия» их финансовой активности. И этот показатель - Lifetime.

Lifetime - это среднее время, в течение которого пользователь остается активным.

Важно: мы не рассматриваем, контактировал ли пользователь с продуктом каждый день, но рассматриваем общее количество дней (с первого до последнего контакта), проведенных с продуктом.

Как считать?

Обычно lifetime считается по когортам, и чем больше времени проходит с первого контакта, тем меньше пользователей из когорты продолжают использовать продукт. А самый большой отток обычно происходит в первые дни (см. картинку под постом).

Есть несколько способов расчета lifetime.

🟢 Наиболее точный способ

Берем группу пользователей, ждем пока все они полностью «отвалятся», и считаем среднее количество времени, которое они провели с нами до ухода.

Например, у нас есть когорта из 100 пользователей, и мы знаем, сколько дней они провели в проекте прежде, чем покинули его:

|Кол-во клиентов|Кол-во дней|
| 30 | 1 |
| 20 | 7 |
| 10 | 14 |
| 10 | 18 |
| 10 | 22 |
| 5 | 31 |
| 5 | 40 |
| 5 | 45 |
| 5 | 54 |


В этом случае их lifetime равен 15,6 дням.

Но, чувствуете подвох? Расчет точного lifetime может занять достаточно много времени и это почти невозможно в реальной жизни, поскольку придется ждать, пока все пользователи окончательно прекратят использовать продукт.

Поэтому обычно мы, грубо говоря, оцениваем lifetime, а не считаем его. И при оценке мы опираемся в большей степени на retention.

🟡 Второй способ

Одним из способов оценить lifetime будет определение «точки невозврата», когда неактивные определенное количество дней (7, 14, 30) юзеры, считаются «отвалившимися».

🟣 Третий способ

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

Что нам дает lifetime?

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

Вот поэтому он очень полезен - он дает общую картину продукта всего одним числом.

При работе с lifetime обращайте внимание на сегментацию. Можно делить пользователей по-разному: по стране, полу, устройству, а можно делить по проведенному времени с продуктом. То есть отдельно посмотреть на поведение юзеров с lifetime = неделя, две, месяц - вы сможете увидеть зависимости и, скорее всего, понять причины оттока.

Разница между Lifetime и Lifetime Value

Мы не раз видели подобные вопросы от наших студентов. Тут важно понимать, что LTV больше финансовая метрика (буквально наш доход от юзера за его lifetime). И хотя lifetime, в отличие от LTV, мы измеряем не в рублях, он все равно очень влияет на доход. Чем выше lifetime, тем дольше пользователь будет совершать платежи. Для сервисов с подпиской, это, пожалуй, особенно важные метрики.

#analytics #продуктовые_метрики
👍7🔥71
🔥5
Напоминаем про интенсив 🔥

Напоминаем, что сегодня в 19:00 пройдет интенсив «Собираем портфолио аналитика: когортный анализ LTV в SQL».

По итогу интенсива вы:

- Глубоко разберетесь с LTV и механикой когортного анализа
- Научитесь писать красивый SQL-запрос для проведения когортного анализа
- Сформулируете бизнес-выводы на основании анализа
- Упакуете впечатляющий кейс в портфолио

Вас ждет только крутой контент и ничего больше, поэтому скорее нажимайте кнопку, чтобы записаться на интенсив👇🏻

🔗 Ссылка для записи на интенсив: [
ссылка]
👍5🔥41