#interview #ab
Материалы, по которым соискатели готовились к собеседованию:
Обзор системы сплитования (на примере Авито): https://habr.com/p/454164/
Краткий обзор по статистическим тестам:
https://vkteam.medium.com/practitioners-guide-to-statistical-tests-ed2d580ef04f
Пуассоновский бутстрап:
https://youtu.be/Zki9VMzxcFU
Подсчёт MDE:
https://medium.com/statistics-experiments/когда-останавливать-a-b-тест-часть-1-mde-7d39b668b488 (Часть 1)
https://medium.com/statistics-experiments/когда-останавливать-a-b-тест-часть-2-monte-carlo-a342ba5b552c (Часть 2)
Стратификация:
https://habr.com/ru/company/X5Tech/blog/596279/
Методы сокращения дисперсии и зачем это нужно: https://youtu.be/KvIJ8FCJzr4
Увеличение чувствительности в A/B с помощью Cuped: https://youtu.be/pZpUM08mv-E
Про FPR, TPR, Statistical power и p-value:
https://youtu.be/XTcP4oo4JI4
https://youtu.be/-zps6hm0nX8
https://youtu.be/2nP_gcut7SU
Канал для подготовки к интервью в сфере Data Science: https://www.youtube.com/c/DataInterviewPro
Лекция Нерсеса Багияна про A/B-тесты: https://youtu.be/cWmS-ws4z9I
Курс «Основы статистики»: https://stepik.org/course/76/syllabus
Курс «Основы статистики. Часть 2»: https://stepik.org/course/524/syllabus
Курс «Основы статистики. Часть 3»: https://stepik.org/course/2152/syllabus
Материалы, по которым соискатели готовились к собеседованию:
Обзор системы сплитования (на примере Авито): https://habr.com/p/454164/
Краткий обзор по статистическим тестам:
https://vkteam.medium.com/practitioners-guide-to-statistical-tests-ed2d580ef04f
Пуассоновский бутстрап:
https://youtu.be/Zki9VMzxcFU
Подсчёт MDE:
https://medium.com/statistics-experiments/когда-останавливать-a-b-тест-часть-1-mde-7d39b668b488 (Часть 1)
https://medium.com/statistics-experiments/когда-останавливать-a-b-тест-часть-2-monte-carlo-a342ba5b552c (Часть 2)
Стратификация:
https://habr.com/ru/company/X5Tech/blog/596279/
Методы сокращения дисперсии и зачем это нужно: https://youtu.be/KvIJ8FCJzr4
Увеличение чувствительности в A/B с помощью Cuped: https://youtu.be/pZpUM08mv-E
Про FPR, TPR, Statistical power и p-value:
https://youtu.be/XTcP4oo4JI4
https://youtu.be/-zps6hm0nX8
https://youtu.be/2nP_gcut7SU
Канал для подготовки к интервью в сфере Data Science: https://www.youtube.com/c/DataInterviewPro
Лекция Нерсеса Багияна про A/B-тесты: https://youtu.be/cWmS-ws4z9I
Курс «Основы статистики»: https://stepik.org/course/76/syllabus
Курс «Основы статистики. Часть 2»: https://stepik.org/course/524/syllabus
Курс «Основы статистики. Часть 3»: https://stepik.org/course/2152/syllabus
Forwarded from Data Science Private Sharing
#Tip26 #EDA
Partial dependence plots (PDP) — это график, который позволяет понять, как различные значения конкретной фичи влияют на предсказания модели.
Под капотом PDP меняет исходные значения целевой фичи и смотрит как изменяются предсказания модели.
По сути PDP показывает ожидаемое среднее значение таргета при различных значения интересующей нас фичи.
Строятся PDP в двух вариантах - для одной фичи и для пары фичей. Обычно для графика выбирают наиболее значимые для модели фичи.
Т.к. PDP работает с уже обученной моделью, то это еще один способ приоткрыть завесу черного ящика (наряду с SHAP и пр.).
PDP можно построить либо с помощью скалерна (но на вход принимаются только родные для скалерна модели):
Либо с помощью сторонних пакетов, например PDPbox (https://github.com/SauceCat/PDPbox):
З.Ы. У PDPbox есть еще много других интересных графиков.
Partial dependence plots (PDP) — это график, который позволяет понять, как различные значения конкретной фичи влияют на предсказания модели.
Под капотом PDP меняет исходные значения целевой фичи и смотрит как изменяются предсказания модели.
По сути PDP показывает ожидаемое среднее значение таргета при различных значения интересующей нас фичи.
Строятся PDP в двух вариантах - для одной фичи и для пары фичей. Обычно для графика выбирают наиболее значимые для модели фичи.
Т.к. PDP работает с уже обученной моделью, то это еще один способ приоткрыть завесу черного ящика (наряду с SHAP и пр.).
PDP можно построить либо с помощью скалерна (но на вход принимаются только родные для скалерна модели):
fig, ax = plt.subplots(figsize=(18.5,4.5))
features = ['bahrooms','sqf_living','yr_buil']
PartialDependenceDisplay.from_estimator(clf, X, features, ax=ax);
Либо с помощью сторонних пакетов, например PDPbox (https://github.com/SauceCat/PDPbox):
features_to_plot = ['sqf_living','bahrooms']
inter1 = pdp.pdp_interact(model=model, dataset=X, model_features=fcols, features=features_to_plot)
pdp.pdp_interact_plot(pdp_interact_out=inter1, feature_names=features_to_plot, plot_type='contour')
plt.show()
З.Ы. У PDPbox есть еще много других интересных графиков.
Forwarded from Artificial stupidity
#ltv #AB #statistics
Проведение A/B тестов над LTV.
Учитывая, что LTV - метрика с достаточно долгим сроком прогнозирования (от месяцев до лет), очевидным образом у нас может возникнуть вопрос - а как это тестировать то? Кажется, что при скорости A/B тестов 1 раз в полгода-год, конкуренты легкой лунной походкой обойдут нас на всех поворотах и вырвутся в лидеры. Потому надо что-то делать.
В принципе, проблему A/B тестирования LTV можно свести к более общей проблеме оценки Long-term эффектов. Этой проблеме даже посвятили отдельный раздел в paper’е Рона Кохави и Лукаса Веермеера “Top Challenges from the first Practical Online Controlled Experiments Summit”. Давайте посмотрим на предлагаемые индустрией решения этой проблемы.
Итак, что же нам предлагают исследователи из разных компаний:
- Отложенная выборка.
Нам предлагается “отложить” на достаточно долгое время некую часть пользователей, на которую мы не будем применять воздействий. В принципе, подход рабочий (мы на одном из предыдущих мест работы его применяли), но сложно реализуемый, если у вас есть хоть какой-то сетевой эффект. Например, часть пользователей будет видеть рекомендательную систему и расскажет своим друзьям. А у них такой системы нет. И тогда поддержке придется туго, если они захотят объяснить, отчего же такое произошло.
Вторая проблема - ротация пользователей. Если мы все не решимся “замораживать” пользователя на год, то у нас должна появиться логика ротации пользователей, то есть перемещения их в “заморозку”, последующего возвращения и правил попадания в эту группу, что может быть не так просто.
- Прокси-метрики.
Простой вариант - мы смотрим не на основную метрику, а на какой-то промежуточный показатель, который, как нам кажется, хорошо определяет поведение основного показателя. Например, для LTV это может быть retention, или user-engagement. То есть, вовлеченность пользователя может неплохо отражать его склонность тратить на нас деньги.
Но минус тут очевидный - “correlation may not imply causation”. Т.к. зависимость между метриками может и не быть реальной причинно-следственной связью. И тогда выводы на proxy не будут вести к улучшению главного показателя.
- Моделирование на основании частичных данных.
Такой подход используется в Google. Давайте запускать кусочки эксперимента через некоторые периоды времени. И потом сравнивать, как постепенно затухает наша метрика при удалении во времени от эксперимента. А дальше мы можем выучить какую-либо кривую, которая аппроксимирует наше затухание, и учитывать это при предсказании эффектов от экспериментов.
Тут тоже не без проблем. Процесс такого запуска весьма непростой и сделать очень большие временные лаги между запусками вряд ли выйдет. Плюс, у нас добавляется еще и моделирующая составляющая, то есть тут нужно все делать аккуратно. Ну и не забывать о смещении, ибо есть вероятность обучить что-то и нарваться на смещенные предсказания.
- Суррогаты.
Можно сказать, что это своего рода расширение над прокси-метриками. В данном случае, мы ищем статистические суррогаты, которые находятся в графе причинно-следственных связей между treatment и outcome. И, что главное, имеют следующее свойство: treatment и outcome условно независимы при условии суррогата. При этом, нам не обязательно использовать только одну прокси-метрику для построения суррогата - мы можем построить вектор прокси-метрик, который будет иметь требуемое свойство.
Соответственно, из минусов у нас то, что нам надо строить какую-то причинно следственную модель, отбирать прокси-метрики в суррогат, пытаясь учесть все нужные прокси (что не так просто, как может показаться на первый взгляд).
Чтобы чуть углубитьcя в тему, давайте рассмотрим какой-нибудь из вариантов решения проблемы оценки Long-term эффектов. В следующей заметке я опишу использование статистических суррогатов на основе статьи от LinkedIn.
Проведение A/B тестов над LTV.
Учитывая, что LTV - метрика с достаточно долгим сроком прогнозирования (от месяцев до лет), очевидным образом у нас может возникнуть вопрос - а как это тестировать то? Кажется, что при скорости A/B тестов 1 раз в полгода-год, конкуренты легкой лунной походкой обойдут нас на всех поворотах и вырвутся в лидеры. Потому надо что-то делать.
В принципе, проблему A/B тестирования LTV можно свести к более общей проблеме оценки Long-term эффектов. Этой проблеме даже посвятили отдельный раздел в paper’е Рона Кохави и Лукаса Веермеера “Top Challenges from the first Practical Online Controlled Experiments Summit”. Давайте посмотрим на предлагаемые индустрией решения этой проблемы.
Итак, что же нам предлагают исследователи из разных компаний:
- Отложенная выборка.
Нам предлагается “отложить” на достаточно долгое время некую часть пользователей, на которую мы не будем применять воздействий. В принципе, подход рабочий (мы на одном из предыдущих мест работы его применяли), но сложно реализуемый, если у вас есть хоть какой-то сетевой эффект. Например, часть пользователей будет видеть рекомендательную систему и расскажет своим друзьям. А у них такой системы нет. И тогда поддержке придется туго, если они захотят объяснить, отчего же такое произошло.
Вторая проблема - ротация пользователей. Если мы все не решимся “замораживать” пользователя на год, то у нас должна появиться логика ротации пользователей, то есть перемещения их в “заморозку”, последующего возвращения и правил попадания в эту группу, что может быть не так просто.
- Прокси-метрики.
Простой вариант - мы смотрим не на основную метрику, а на какой-то промежуточный показатель, который, как нам кажется, хорошо определяет поведение основного показателя. Например, для LTV это может быть retention, или user-engagement. То есть, вовлеченность пользователя может неплохо отражать его склонность тратить на нас деньги.
Но минус тут очевидный - “correlation may not imply causation”. Т.к. зависимость между метриками может и не быть реальной причинно-следственной связью. И тогда выводы на proxy не будут вести к улучшению главного показателя.
- Моделирование на основании частичных данных.
Такой подход используется в Google. Давайте запускать кусочки эксперимента через некоторые периоды времени. И потом сравнивать, как постепенно затухает наша метрика при удалении во времени от эксперимента. А дальше мы можем выучить какую-либо кривую, которая аппроксимирует наше затухание, и учитывать это при предсказании эффектов от экспериментов.
Тут тоже не без проблем. Процесс такого запуска весьма непростой и сделать очень большие временные лаги между запусками вряд ли выйдет. Плюс, у нас добавляется еще и моделирующая составляющая, то есть тут нужно все делать аккуратно. Ну и не забывать о смещении, ибо есть вероятность обучить что-то и нарваться на смещенные предсказания.
- Суррогаты.
Можно сказать, что это своего рода расширение над прокси-метриками. В данном случае, мы ищем статистические суррогаты, которые находятся в графе причинно-следственных связей между treatment и outcome. И, что главное, имеют следующее свойство: treatment и outcome условно независимы при условии суррогата. При этом, нам не обязательно использовать только одну прокси-метрику для построения суррогата - мы можем построить вектор прокси-метрик, который будет иметь требуемое свойство.
Соответственно, из минусов у нас то, что нам надо строить какую-то причинно следственную модель, отбирать прокси-метрики в суррогат, пытаясь учесть все нужные прокси (что не так просто, как может показаться на первый взгляд).
Чтобы чуть углубитьcя в тему, давайте рассмотрим какой-нибудь из вариантов решения проблемы оценки Long-term эффектов. В следующей заметке я опишу использование статистических суррогатов на основе статьи от LinkedIn.
Forwarded from Data Science Private Sharing
#Tip26.1 #EDA
Для понимания как строится PDP попробуем построить его в ручную.
Алгоритм такой:
- Выбираем какую-нибудь фичу
- Вычисляем все ее уникальные значения (для непрерывной фичи можно взять сколько-то квантильных значений)
- Проходимся по каждому из них и:
- В исходном датасете для нашей фичи заменяем все значения на одно - текущее
- Делаем предсказание
- Усредняем полученные предсказания
И так для каждого уникального значения. В итоге получаем набор пар: (уникальное значение - средний предикт)
По смыслу мы как бы спрашиваем модель: а что если бы фича принимала бы только одно значение из возможного диапазона (при этом другие фичи не трогаем) - какими тогда стали бы предсказания?
- Выводим их на графике.
З.Ы. Также для демонстрации влияния на отдельные примеры выведем случайные 50 записей. Такой график уже будет называться Individual Conditional Expectation (ICE). Он позволяет увидеть какие-либо аномалии - как отдельные записи отклоняются от среднего значения.
Для понимания как строится PDP попробуем построить его в ручную.
Алгоритм такой:
- Выбираем какую-нибудь фичу
- Вычисляем все ее уникальные значения (для непрерывной фичи можно взять сколько-то квантильных значений)
- Проходимся по каждому из них и:
- В исходном датасете для нашей фичи заменяем все значения на одно - текущее
- Делаем предсказание
- Усредняем полученные предсказания
И так для каждого уникального значения. В итоге получаем набор пар: (уникальное значение - средний предикт)
По смыслу мы как бы спрашиваем модель: а что если бы фича принимала бы только одно значение из возможного диапазона (при этом другие фичи не трогаем) - какими тогда стали бы предсказания?
- Выводим их на графике.
З.Ы. Также для демонстрации влияния на отдельные примеры выведем случайные 50 записей. Такой график уже будет называться Individual Conditional Expectation (ICE). Он позволяет увидеть какие-либо аномалии - как отдельные записи отклоняются от среднего значения.
# Считаем PDP
col = 'grade'
uniq_values = sorted(X[col].unique())
preds = {}
for v in uniq_values:
X_copy = X.copy()
X_copy[col] = v
preds[v] = model.predict(X_copy)
preds = pd.DataFrame(preds)
pdp = preds.mean()
# Выбираем случайные 50 записей
samp = preds.sample(50).copy()
samp = samp.reset_index().melt('index', var_name='cols', value_name='vals')
# Строим графики
plt.figure(figsize=(13,6))
sns.lineplot(data=samp, x='cols', y='vals', hue='index', legend=False, palette='GnBu', alpha=0.2)
sns.lineplot(x=pdp.index, y=pdp, color='red', linewidth=2)
plt.xlabel(col)
plt.ylabel('PDP');
Forwarded from я так понимаю, Роман Васильев
Из https://news.1rj.ru/str/proudobstvo
Имхо актуально во всех направлениях
Кому за что платят:
Джун:
— за стремление оперативно находить знания, необходимые для решения задач.
— за правильные вопросы, если знания не нашёл.
Мидл:
— за широкий круг знаний, применяемых при решении широкого круга задач.
Синьёр:
— за глубинные знания, применяемые при решении узкого круга задач.
— за умение создавать знания после решения ранее нерешаемых задач.
— за правильные ответы на вопросы.
Лид:
— за уверенность и умение решать вопросы, а не задавать их.
— за знание, как умножать знания в команде.
— за умение не делать задачи, которые умеют делать другие.
Имхо актуально во всех направлениях
Кому за что платят:
Джун:
— за стремление оперативно находить знания, необходимые для решения задач.
— за правильные вопросы, если знания не нашёл.
Мидл:
— за широкий круг знаний, применяемых при решении широкого круга задач.
Синьёр:
— за глубинные знания, применяемые при решении узкого круга задач.
— за умение создавать знания после решения ранее нерешаемых задач.
— за правильные ответы на вопросы.
Лид:
— за уверенность и умение решать вопросы, а не задавать их.
— за знание, как умножать знания в команде.
— за умение не делать задачи, которые умеют делать другие.
Telegram
Про удобство (Михаил Греков)
Про продуктоводство, UX, работу с b2b-продуктом и здравый смысл.
Пишет Михаил Греков, Head of product AW BI aw-bi.ru
🔥 Второй канал: Продуктовошная @suda_smotri
🔥 Третий: B2B РЕХАБ @b2brehab
РКН: https://clck.ru/3FeFq7
Сотрудничество — @GrekovM
Пишет Михаил Греков, Head of product AW BI aw-bi.ru
🔥 Второй канал: Продуктовошная @suda_smotri
🔥 Третий: B2B РЕХАБ @b2brehab
РКН: https://clck.ru/3FeFq7
Сотрудничество — @GrekovM
Forwarded from Диаграммы и презентации
Полезные блоги про визуализацию данных.
Поделюсь несколькими хорошими ресурсами по визу. Их точно намного больше, всего знать не могу. Но вот, что читаю и смотрю:
1. http://www.perceptualedge.com/blog/
ENG. Блог Стивена Фью. Это самый известный в мире дядя в сфере бизнес-инфографики. Он не так часто пишет, но есть архив, в нем много всего интересного, полезного, умного. Почитайте, не пожалеете)
2. https://blog.datawrapper.de/
ENG. Блог ребят из Datawrapper. Очень простые, понятные и полезные статьи про виз-ию данных. Много примеров. Разбирают ошибки, что нужно учитывать при построении разных диаграмм, как работать с цветом, про него прям много материала.
3. https://filwd.substack.com/
ENG. Пока не большой, но полезный блог Энрико Бертини. Это исследователь в области виз-ии данных и визуальной аналитики.
4. https://www.storytellingwithdata.com/blog
ENG. Не помню, как нашла этот блог. Но очень понятные и полезные статьи. Много примеров и разборов.
5. https://eagereyes.org/
ENG. Блог Роберта Косары. Его работы — это визуальный сторителлинг с помощью данных. Много полезных статей и его интересный взгляд на виз-ию данных.
6. https://news.1rj.ru/str/analyst_club
RUS. Телеграм-канал Алексея Колоколова - клуб анонимных аналитиков. Много пишет про диаграммы и дашборды.
7. https://news.1rj.ru/str/chartomojka
RUS. Телеграм-канал Александра Богачева - Чартомойка. Думаю его многие знают. Много пишет про диаграммы, делает разборы, делится полезной информацией.
8. https://news.1rj.ru/str/revealthedata
RUS. Телеграм-канал Ромы Бунина. Про визуализацию данных, развитие BI-систем и Tableau.
А где смотреть примеры хороших работ, чтобы развивать насмотренность?
1. https://informationisbeautiful.net/
ENG. Блог Дэвида Маккэндлесса. Взгляд на большие данные с точки зрения дизайнера. Маккэндлесс – известный практик в области инфографики. В основе его идеи лежит преобразование информации, содержащей минимум слов, в красивую и полезную визуализацию. Очень много красивых работ.
https://informationisbeautiful.net/beautifulnews/
И еще его работы.
2. https://journal.tinkoff.ru/flows/statistika/
RUS. Тинькофф-журнал раздел Статистика. Много интересных статей и в каждой есть виз-ия данных. Много хороших работ.
3. https://ria.ru/infografika/
RUS. Раздел инфографики у РИА Новости. Много интересных работ.
Делитесь в комментах ресурсами и блогами, которые знаете/читаете/смотрите по виз-ии данных😊
Поделюсь несколькими хорошими ресурсами по визу. Их точно намного больше, всего знать не могу. Но вот, что читаю и смотрю:
1. http://www.perceptualedge.com/blog/
ENG. Блог Стивена Фью. Это самый известный в мире дядя в сфере бизнес-инфографики. Он не так часто пишет, но есть архив, в нем много всего интересного, полезного, умного. Почитайте, не пожалеете)
2. https://blog.datawrapper.de/
ENG. Блог ребят из Datawrapper. Очень простые, понятные и полезные статьи про виз-ию данных. Много примеров. Разбирают ошибки, что нужно учитывать при построении разных диаграмм, как работать с цветом, про него прям много материала.
3. https://filwd.substack.com/
ENG. Пока не большой, но полезный блог Энрико Бертини. Это исследователь в области виз-ии данных и визуальной аналитики.
4. https://www.storytellingwithdata.com/blog
ENG. Не помню, как нашла этот блог. Но очень понятные и полезные статьи. Много примеров и разборов.
5. https://eagereyes.org/
ENG. Блог Роберта Косары. Его работы — это визуальный сторителлинг с помощью данных. Много полезных статей и его интересный взгляд на виз-ию данных.
6. https://news.1rj.ru/str/analyst_club
RUS. Телеграм-канал Алексея Колоколова - клуб анонимных аналитиков. Много пишет про диаграммы и дашборды.
7. https://news.1rj.ru/str/chartomojka
RUS. Телеграм-канал Александра Богачева - Чартомойка. Думаю его многие знают. Много пишет про диаграммы, делает разборы, делится полезной информацией.
8. https://news.1rj.ru/str/revealthedata
RUS. Телеграм-канал Ромы Бунина. Про визуализацию данных, развитие BI-систем и Tableau.
А где смотреть примеры хороших работ, чтобы развивать насмотренность?
1. https://informationisbeautiful.net/
ENG. Блог Дэвида Маккэндлесса. Взгляд на большие данные с точки зрения дизайнера. Маккэндлесс – известный практик в области инфографики. В основе его идеи лежит преобразование информации, содержащей минимум слов, в красивую и полезную визуализацию. Очень много красивых работ.
https://informationisbeautiful.net/beautifulnews/
И еще его работы.
2. https://journal.tinkoff.ru/flows/statistika/
RUS. Тинькофф-журнал раздел Статистика. Много интересных статей и в каждой есть виз-ия данных. Много хороших работ.
3. https://ria.ru/infografika/
RUS. Раздел инфографики у РИА Новости. Много интересных работ.
Делитесь в комментах ресурсами и блогами, которые знаете/читаете/смотрите по виз-ии данных😊
Forwarded from DevFM
Вопросы для junior python developer
Статьи для подготовки к собеседованиям хорошо помогают в поиске собственных пробелов в знаниях. В статье Полный список вопросов с собеседований по Python для дата-сайентистов и инженеров (habr, 2020, оригинал) на самом деле покрываются базовые аспекты Python для младшего разработчика.
Некоторые вещи объяснены плохо, лучше прочитайте документацию, книги Лутца или Лучано. Кстати, у последнего в этом году вышло второе издание Python. К вершинам мастерства (в оригинале Fluent Python).
И да, в п. 53 автор забыл, что в try-except-finally может быть и else, который выполнится, если не было исключений. О блоке else у for мы писали раньше.
#python #books
Статьи для подготовки к собеседованиям хорошо помогают в поиске собственных пробелов в знаниях. В статье Полный список вопросов с собеседований по Python для дата-сайентистов и инженеров (habr, 2020, оригинал) на самом деле покрываются базовые аспекты Python для младшего разработчика.
Некоторые вещи объяснены плохо, лучше прочитайте документацию, книги Лутца или Лучано. Кстати, у последнего в этом году вышло второе издание Python. К вершинам мастерства (в оригинале Fluent Python).
И да, в п. 53 автор забыл, что в try-except-finally может быть и else, который выполнится, если не было исключений. О блоке else у for мы писали раньше.
#python #books
Хабр
Полный список вопросов с собеседований по Python для дата-сайентистов и инженеров
Snake and flowers 2 by pikaole Бывает, что компания ищет дата-сайентиста, а на самом деле ей нужен Python-разработчик. Поэтому при подготовке к собеседованию есть смысл освежить в памяти информацию по...
Forwarded from Dmitry K
Посоветовали вот плейлист по тематике сисдиза (его уже кидали в чате, но пусть будет еще раз, с описанием).
https://www.youtube.com/channel/UC-Z7T0lAq_xECevIz8E5R5w
> Ещё классные видео есть на Youtube у Mark Richards. Это один из авторов Fundamentals of Software Architecture (книга непростая, но крутая, планирую ее в бумажном варианте тоже заказать себе).
> Формат такой: берётся какой-нибудь вопрос типа ACID vs BASE, request/reply VS messaging и относительно подробно разбирается. Марк очень здорово объясняет
https://www.youtube.com/channel/UC-Z7T0lAq_xECevIz8E5R5w
> Ещё классные видео есть на Youtube у Mark Richards. Это один из авторов Fundamentals of Software Architecture (книга непростая, но крутая, планирую ее в бумажном варианте тоже заказать себе).
> Формат такой: берётся какой-нибудь вопрос типа ACID vs BASE, request/reply VS messaging и относительно подробно разбирается. Марк очень здорово объясняет