Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 2 weeks, 2 days ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month ago
💃Мини-отзыв на курс Продвинутое АБ-тестирование от Карпова
Я наконец-то домурыжила этот курс (или он меня…), поэтому могу поделиться мыслишками по этому поводу.
Какие темы на курсе? Тут я сразу прикрепляю ссылки, где можно посмотреть инфу по этим темам, если вдруг не хочется брать платный курс.
1) Основы статистики
https://avito.tech/education/statistics
https://practicum.yandex.ru/profile/statistics-basic/?from=new_landing_statistics-basic
2) Проверка гипотез
https://www.youtube.com/watch?v=O6FXzCFnJxM
https://youtu.be/TpUflOQo1kI?si=41ZbgBFkVkzbeyU9
https://www.youtube.com/watch?v=dFCJysbOJ8c
3) MDE, sample size, дизайн эксперимента
https://www.youtube.com/live/2nP_gcut7SU?si=O_2skcdRoU4JqBAl
4) Тестирование дизайна
https://habr.com/ru/companies/X5Tech/articles/706388/
5) Доверительные интервалы, бутстреп
https://habr.com/ru/companies/X5Tech/articles/679842/
6) Повышение чувствительности тестов, variance reduction
https://youtu.be/KvIJ8FCJzr4?si=5sQbxFi0pG0arRbM
7) Выбор метрик
https://habr.com/ru/companies/alconost/articles/542848/
https://habr.com/ru/companies/ligastavok/articles/718336/
8) Стратификация
https://habr.com/ru/companies/X5Tech/articles/596279/
https://youtu.be/8MzvjrWUJ_0?si=J2n-R53oaXx8wEbE
9) CUPED
https://habr.com/ru/companies/X5Tech/articles/780270/
https://habr.com/ru/companies/X5Tech/articles/826488/
https://youtu.be/pZpUM08mv-E?si=Lb3OgJHm0rpQb-DK
10) Множественное тестирование
https://habr.com/ru/companies/X5Tech/articles/842426/
11) Сплитилка трафика. Схемы запусков. Эффект памяти. Двойное хеширование
https://habr.com/ru/companies/avito/articles/454164/
https://blog.richardweiss.org/2016/12/25/hash-splits.html
12) Анализ метрик отношений. Дельта-метод. Линеаризация
https://habr.com/ru/companies/X5Tech/articles/740476/
https://habr.com/ru/companies/kuper/articles/768826/
13) Полный пайплайн аб-тестирования
https://youtu.be/gljfGAkgX_o?si=XeAtG4n__aoTocVn
https://www.youtube.com/watch?v=IQUt9qTsQ0s
https://www.youtube.com/watch?v=HpinAY5QfCo
https://habr.com/ru/companies/deliveryclub/articles/670762/
https://habr.com/ru/companies/ozontech/articles/712306/
https://youtu.be/-xjd32x8QN4?si=a1iZHCd_CDFXzp4u
Общие впечатления:
- не хватило осмысленной практики. Чаще были игрушечные квизы + хотелось бы пояснения под правильными ответами, а то фраза «верно» - такое себе объяснение. Eсть задания на кодинг, пописать на питоне. Пример заданий: написать функцию оценки размера выборки, функцию оценки вероятности ошибок I/II рода
- было бы круто сделать отдельный модуль с «типичными» вопросами на собесах, но такого нет.
- курс задизайнили так, что ты не можешь глянуть выборочно темы, которые тебе интересны, если не прошел предыдущие модули/уроки. То есть чтобы получить доступ ко 2 уроку, нужно пройти лекцию и семинар 1 урока.
- если совсем застрянете на какой-то задаче из практики, то можно глянуть разбор решения (но тогда потеря балла будет)
- хотелось бы более структурной подачи инфы. Иногда темы, которые по смыслу должны идти друг за другом, разрываются другой темой.
- самая ценная часть на мой взгляд - q&a сессии с автором курса, где разбираются вопросы студентов.
- финальная работа - это просто тест из 26 вопросов (мега простой, проходится за 5 минут).
- половина курса - это по сути статьи на хабре от X5 (оно и понятно, авторы курса же тоже из X5/ex)
- было бы здорово, если бы добавили урок аля «за пределами аб-тестирования» и рассказать, какие есть варианты жизни без аб.
Например:
https://habr.com/ru/companies/kuper/articles/804875/ - Propensity score matching
https://habr.com/ru/companies/netologyru/articles/751578/ - Difference-in-Difference
Итог:
Какое-то вот смешанное впечатление по итогу. Общую оценку 7/10 я бы поставила. Наверное, посоветую поискать «живые» курсы. Онлайн встречи, на которых сразу можно задавать вопросы лектору и смотреть практические примеры с пояснениями, такие курсы в профильных каналах можно встретить. Я пока присматриваюсь к ним.
Да что вы знаете о неловких ситуациях?
Я сейчас была на встрече со смежной командой и обсуждали животрепещущий вопрос по витринам.
И в момент моего максимального несогласия я открыла чат с тимлидом и написала о том, как я устала от другой команды…
Но я забыла, что в этот момент ШАРИЛА СВОЙ ЭКРАН
Вот, сижу, думаю, возвращаться мне из отпуска (в который так удачно ухожу завтра) или сразу на увольнение заявление🫠
А какие у вас были неловкие ситуации на работе?
👊А я сейчас вам покажу откуда на кандидата нападение готовилось
На позицию аналитика вас 100% будут спрашивать SQL.
Хочу показать вам задание, на которое отвечают только 2 из 10 кандидатов (по личной статистике). Очень популярная задачка, ей уже лет 5 как минимум, встречалась на собесах Яндекса, Сбера, ВТБ.
Вам дают таблицу. Допустим, вот такую:
id1 | id2 | id3
NULL 1 NULL
2 2 NULL
5 NULL NULL
NULL NULL NULL
2 3 NULL
А дальше вам предлагают написать, что будет результатом каждого из запроса к такой таблице:
select
max(id1) = 5
sum(id1) = 9
sum(id1+id2) = 9
sum(id3) = null
avg(id1) = 3
sum(8) = 40
count(*) = 5
count(1) = 5
count(id1) = 3
count(id3) = 0
count('id1') = 5
count(distinct id1) = 2
from table
Задание главным образом проверяет знания о том, как функции работают с null значениями и специфические конструкции.
1) В агрегатных функциях, таких как SUM, AVG, MAX и MIN, NULL обрабатывается следующим образом: для вычисления результата принимаются в рассмотрение только значения полей, не содержащие NULL.
2) Исключением является функция COUNT(), возвращающая общее количество строк в выборке. COUNT() не принимает на вход никакого выражения, а просто возвращает количество строк в выборке, независимо от наличия NULL значений.
3) Но COUNT(ИмяПоля) ведет себя как и остальные агрегатные функции, то есть считает записи, в которых значение указанного поля не является NULL.
4) COUNT(*) и COUNT(ИмяПоля) вернут 0, если нет записей в наборе данных. Другие агрегатные функции вернут NULL в таком случае.
5) У функции COUNT есть еще одна форма - COUNT(DISTINCT выражение). При такой форме записи функция вернет количество уникальных значений, при этом NULL значения по прежнему не учитываются.
6) Функция COUNT в SQL подсчитывает количество ненулевых значений в указанном столбце или количество строк, если передан аргумент, который не является столбцом.
7) Функция SUM(число) суммирует число для каждой строки, которая есть в таблице.
Подобный вопрос есть и в боте для подготовки к собеседованиям @DataismPrepBot. Пользуйтесь!
💃💃💃Оптимизируй!
Когда я работала в банке, у нас периодически приходило письмо с особо отличившимися сотрудниками, которые своими запросами бессовестно выжрали все ресурсы в одну мордочку.
Знаю, что в других банках за такое дают «желтую карточку», а если 2 раза провинился - ограничение доступа и иди учись на корп.курсах как правильно себя вести.
Так что советую для развития почитать книжку «Оптимизация запросов в PostgreSQL» (Домбровская Г.) и глянуть видео внизу поста.
Основные поинты из книги:
1. Селективность запроса - это соотношения количества строк, составляющих результат операции, к общему количеству строк в таблице.
2. Запрос является коротким, когда количество строк, необходимых для получения результата, невелико независимо от того, насколько велики задействованные таблицы. Короткие запросы могут считывать все строки из маленьких таблиц, но лишь небольшой процент строк из больших таблиц.
3. Запрос считается длинным, если селективность запроса высока по крайней мере для одной из больших таблиц; то есть результат, даже если он невелик, определяется почти всеми строками.
4. Когда мы оптимизируем короткий запрос, мы знаем, что в конечном итоге мы выбираем относительно небольшое количество записей. Это означает, что цель оптимизации – уменьшить размер результирующего множества как можно раньше. Если на первых этапах выполнения запроса применяется самый строгий критерий фильтрации, дальнейшие сортировки, группировки и даже соединения будут менее затратными. В плане выполнения не должно быть сканирований больших таблиц.
5. Если вы выполняете какие-то преобразования над полем индекса (функции lower, преобразование типов данных), то запрос не сможет воспользоваться таким индексом. Нужно либо переписывать условие в запросе без использования преобразования, либо создавать функциональный индекс.
6. В случае с длинными запросами используются две стратегии оптимизации: избегать многократных сканирований таблиц и уменьшать размер результата на как можно более ранней стадии.
7. Как правило, составной индекс по столбцам (X, Y, Z) будет использоваться для поиска по X, XY, XYZ и даже XZ, но не только по Y и не по YZ. Таким образом, при создании составного индекса недостаточно решить, какие столбцы в него включить; необходимо также учитывать их порядок.
8. Иногда попытка разработчиков SQL ускорить выполнение запроса, наоборот, может привести к замедлению. Такое часто случается, когда они решают использовать временные таблицы. Сразу возникает проблема с:
- индексами (мы не можем использовать индексы, созданные в исходной таблице, нам либо придется обойтись без индексов, либо создать новые во временных таблицах, что требует ресурсов)
- местом на диске (когда промежуточные результаты не помещаются в доступную оперативную память, временные таблицы сохраняются на диске), - операциями чтения-запись (дополнительно тратится время)
- статистикой (поскольку мы создали новую таблицу, оптимизатор не может использовать статистические данные о распределении значений из исходной таблицы (или таблиц), поэтому нам придется либо обойтись без статистики, либо выполнить команду ANALYZE для временной таблицы)
Неплохое видео про базовые принципы оптимизации от Евгения Кудашева ЦИАН:
https://www.youtube.com/watch?v=y6CWIBKEw_g
Еще интересная серия постов на хабре о том, как читать план запроса:
https://habr.com/ru/articles/275851/
https://habr.com/ru/articles/276973/
https://habr.com/ru/articles/279255/
А тут два моих поста про код-стайл SQL:
https://t.me/data1sm/215
https://t.me/data1sm/217
Как же я не люблю, когда приходишь с вопросами к продукту, а уходишь с очередной срочной задачей 🫠😉
🐙🎲Кубики и осьминоги
Смотрю очередной курс по аналитике.
Лектор: «99% компаний имеют фиговую аналитику, поэтому вот на собесе, когда вас спросят «что будет, если 6 раз подбросить кубик?», задайте встречный вопрос «а что будет, если аналитику настроить через жопу?». Вряд ли, конечно, после этого вам дадут оффер, но хотя бы глупые вопросы отпадут.»
0% осуждения 100% понимания
Собеседования - очень своеобразная штука.
Исход зависит в основном от 3 факторов: интервьюера, политики компании и твоих ответов.
Выбрал время собеса ближе к концу рабочего дня? Скорее всего интервьюер уставший, голодный, уровень серотонина низкий, поэтому он уже в плохом настроении и у него одно желание - закончить этот рабочий день, а твой собес ему вообще не в кассу.
Приходишь в Авито: вечер в хату, вот вам осьминог Пауля, получите-распишетесь. Не решили? Ариведерчи.
Приходишь в Яндекс: пупупу, раз алгосик, два алгосик, три алгосик. Не получилось? Ну, с такими знаниями стыдно на кофепоинт ходить.
И неважно, что на самой работе ты ни разу не используешь все то, что был вынужден заботать перед собесами в бигтех.
К чему это все я?
На бигтехах свет клином не сходится. Есть куча других компаний, в которых и продукт интересный, и собесы без осьминогов, и зп вилки в рынке или даже выше.
Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 2 weeks, 2 days ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month ago