Data Science | Вопросы собесов
4.93K subscribers
37 photos
1 video
1.37K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @easyoffer_adv
Download Telegram
🤔 Зачем нужен метод dir для объектов?

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

🚩Зачем нужен dir()

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

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

🟠Рефлексия
Это свойство, позволяющее программе манипулировать своими частями. С помощью dir() можно получить список, содержащий имена всех атрибутов, которые доступны в объекте, что может быть использовано для рефлексивного доступа к атрибутам и методам.

🚩Как она работает

Когда вы вызываете dir() для объекта, возвращает список строк. Каждая строка — это имя атрибута или метода, доступного для объекта. Если вызвать dir() без аргументов, то будет возвращен список имен в текущей локальной области видимости.
class Car:
def __init__(self, make, model):
self.make = make
self.model = model

def start(self):
print("Машина заведена")

car = Car("Toyota", "Corolla")

# Выведем список всех атрибутов и методов объекта car
print(dir(car))


Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Почему в картинках используют Standard Scaling вместо MinMax Scaling?

Standard Scaling (z-score normalization) чаще используется для обработки изображений, поскольку:
1. Он центрирует данные вокруг нуля и масштабирует их на основе стандартного отклонения, что улучшает производительность моделей, чувствительных к масштабам.
2. MinMax Scaling, преобразующий значения в диапазон [0, 1], может терять информацию о дисперсии пикселей.
3. Standard Scaling более устойчив к изменению контрастности и яркости изображений.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Как использовать P-value, когда мы проверяем гипотезу?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 В чем разница между командами делит и транткейп?

Команды DELETE и TRUNCATE в SQL используются для удаления данных из таблиц, но они работают по-разному и подходят для разных задач.

🚩Команда DELETE

Используется для удаления определённых записей из таблицы. Можно указать условие с помощью WHERE, чтобы удалить только нужные строки. Например
DELETE FROM employees WHERE department = 'HR';


🟠Характеристики
Удаление происходит построчно. Логируется каждая удалённая запись (затратно по производительности при больших объёмах данных). Можно откатить изменения с помощью транзакций, если используются BEGIN TRANSACTION и ROLLBACK.

🟠Где применять
Когда нужно удалить часть данных, а не все записи. Например, удаление сотрудников только из определённого отдела.

🚩Команда TRUNCATE
🟠Описание
Используется для полного очищения таблицы. Удаляет все строки в таблице без возможности указания условия. Например:
TRUNCATE TABLE employees;


🟠Характеристики
Работает быстрее, чем DELETE, так как не записывает подробный лог изменений. Удаляет данные "в обход" построчного удаления, очищая всю структуру. Нельзя откатить изменения, так как эта операция не поддерживает транзакции в большинстве СУБД.

🟠Где применять
Когда нужно быстро очистить таблицу перед новой загрузкой данных. Например, перед массовой загрузкой обновлённых данных.

🚩Пример для сравнения

DELETE
-- Удалить только сотрудников из отдела HR
DELETE FROM employees WHERE department = 'HR';


TRUNCATE
-- Очистить таблицу сотрудников полностью
TRUNCATE TABLE employees;


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие магические методы в python знаешь?

Магические методы в Python — это специальные методы, которые начинаются и заканчиваются двойным подчеркиванием. Примеры включают `__init__` (конструктор класса), `__str__` (представление объекта в виде строки), `__len__` (возвращает длину объекта) и `__getitem__` (обращение к элементам по индексу). Также есть методы, такие как `__add__` для перегрузки операторов и `__call__`, позволяющий объекту вести себя как функция. Эти методы позволяют кастомизировать поведение объектов Python.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3
🤔 Чем отличаются str и repr?

str предназначен для отображения понятного текста для пользователя, repr — для отображения точного представления объекта для разработчика.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем отличия между char и varchar?

В SQL `CHAR` представляет собой тип данных с фиксированной длиной, тогда как `VARCHAR` — с переменной длиной. `CHAR` быстрее, но потенциально занимает больше места при хранении коротких строк. `VARCHAR` эффективнее использует пространство для хранения текста, размер которого меняется.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое precision?

Precision (точность) — это метрика классификации, которая показывает долю правильных положительных предсказаний среди всех предсказанных положительных классов. Она рассчитывается как отношение количества истинно положительных предсказаний к сумме истинно положительных и ложно положительных. Precision важен, когда цена ложноположительных результатов высока. Высокое значение precision указывает на то, что модель почти не ошибается при предсказании положительного класса.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4
🤔 Как оценивать эффективность работы рекомендательных моделей?

Оценка эффективности рекомендательных моделей делится на точностные и ранговые метрики.

🚩Точностные метрики

🟠RMSE (Среднеквадратичная ошибка)
Формула
RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2}


Пример
from sklearn.metrics import mean_squared_error
import numpy as np

y_true = np.array([4, 3, 5, 2])
y_pred = np.array([3.8, 2.9, 5.1, 2.2])
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print(f'RMSE: {rmse}')


🟠MAE (Средняя абсолютная ошибка)
Формула
MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|


Пример
from sklearn.metrics import mean_absolute_error

y_true = np.array([4, 3, 5, 2])
y_pred = np.array([3.8, 2.9, 5.1, 2.2])
mae = mean_absolute_error(y_true, y_pred)
print(f'MAE: {mae}')


🚩Ранговые метрики

🟠Precision@K и Recall@K
Precision@K: Доля релевантных элементов среди первых K предложений.
Recall@K: Доля найденных релевантных элементов среди всех возможных релевантных.
Пример
def precision_at_k(recommended_items, relevant_items, k):
return len(set(recommended_items[:k]) & set(relevant_items)) / k

def recall_at_k(recommended_items, relevant_items, k):
return len(set(recommended_items[:k]) & set(relevant_items)) / len(relevant_items)

recommended_items = [1, 2, 3, 4, 5]
relevant_items = [3, 4, 5, 6, 7]
k = 3

print(f'Precision@{k}: {precision_at_k(recommended_items, relevant_items, k)}')
print(f'Recall@{k}: {recall_at_k(recommended_items, relevant_items, k)}')


🟠MAP (Средний показатель)
Пример
def average_precision(recommended_items, relevant_items):
score = 0.0
num_hits = 0.0
for i, item in enumerate(recommended_items):
if item in relevant_items:
num_hits += 1.0
score += num_hits / (i + 1.0)
return score / len(relevant_items)

def mean_average_precision(recommended_items_list, relevant_items_list):
return np.mean([average_precision(r, t) for r, t in zip(recommended_items_list, relevant_items_list)])

recommended_items_list = [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]
relevant_items_list = [[3, 4, 5, 6, 7], [1, 2, 3, 4, 5]]

print(f'MAP: {mean_average_precision(recommended_items_list, relevant_items_list)}')


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что можешь сказать про оконные функции?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3
🤔 Какие переменные (типы данных) можно использовать в качестве ключей?

Хэшируемые типы данных, такие как числа, строки, кортежи с неизменяемыми элементами. Это важно, если требуется быстро сопоставить значения в структуре данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Расскажи о Gradient-boosted trees

Gradient-boosted trees — это ансамблевый метод машинного обучения, который строит серию деревьев решений, каждое из которых исправляет ошибки предыдущих. Процесс обучения происходит путем последовательного добавления деревьев, каждое из которых минимизирует ошибку путем градиентного спуска, усиливая правильные прогнозы. Gradient boosting широко используется для задач регрессии и классификации, обеспечивая высокую точность и гибкость в работе с разными типами данных.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как валидировать временные ряды?

Валидация по времени включает разбиение данных на интервалы с учётом временной последовательности. Методы: time series split (скользящее окно), расширяемое окно или кросс-валидация по времени.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что станет с предсказаниями, если в bagging/boosting убрать первое дерево ?

В ансамблевых методах, таких как bagging (bootstrap aggregating) и boosting, удаление первого дерева будет иметь разные последствия из-за различий в подходах к обучению и агрегированию предсказаний.

🚩Bagging

🟠Независимые деревья
В этом методе деревья обучаются независимо друг от друга на разных случайных подвыборках данных. Таким образом, каждое дерево обучается на собственном наборе данных, и предсказания делаются путем усреднения (для регрессии) или голосования (для классификации).
🟠Удаление первого дерева
Если удалить первое дерево из ансамбля, это немного изменит итоговые предсказания, но в большинстве случаев эффект будет минимальным. Причина в том, что каждое дерево в bagging имеет равный вес, и удаление одного дерева из большого числа деревьев не сильно повлияет на общее предсказание ансамбля.

🚩Boosting

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

🟠Удаление первого дерева
Удаление первого дерева в boosting значительно изменит предсказания. Это связано с тем, что каждое последующее дерево основывает свое обучение на ошибках, сделанных предыдущими деревьями. Если первое дерево удалено, то все остальные деревья будут обучаться на других ошибках, что приведет к совершенно другим предсказаниям.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Загрузка данных
data = load_iris()
X = data.data
y = data.target

# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Обучение модели Random Forest
model = RandomForestClassifier(n_estimators=10, random_state=42)
model.fit(X_train, y_train)

# Предсказания
y_pred = model.predict(X_test)

# Удаление первого дерева и повторные предсказания
model.estimators_ = model.estimators_[1:]
y_pred_without_first_tree = model.predict(X_test)

print(f"Accuracy с первым деревом: {accuracy_score(y_test, y_pred)}")
print(f"Accuracy без первого дерева: {accuracy_score(y_test, y_pred_without_first_tree)}")


Для Gradient Boosting (boosting)
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Загрузка данных
data = load_iris()
X = data.data
y = data.target

# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Обучение модели Gradient Boosting
model = GradientBoostingClassifier(n_estimators=10, random_state=42)
model.fit(X_train, y_train)

# Предсказания
y_pred = model.predict(X_test)

# Удаление первого дерева и повторные предсказания
model.estimators_ = model.estimators_[1:]
y_pred_without_first_tree = model.predict(X_test)

print(f"Accuracy с первым деревом: {accuracy_score(y_test, y_pred)}")
print(f"Accuracy без первого дерева: {accuracy_score(y_test, y_pred_without_first_tree)}")


🟠Bagging (например, Random Forest)
Удаление первого дерева окажет незначительное влияние на предсказания, так как каждое дерево обучается независимо.

🟠Boosting (например, Gradient Boosting)
Удаление первого дерева существенно изменит предсказания, так как каждое последующее дерево исправляет ошибки предыдущих, и первое дерево задает начальное направление для коррекции ошибок.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 В чём смысл Information Value (IV)?

Это метрика, используемая для оценки предсказательной способности признака относительно целевой переменной.
1. Высокое значение IV говорит о сильной связи между признаком и целевой переменной.
2. Часто используется в кредитном скоринге для выбора наиболее значимых признаков.
3. Значения IV помогают определить, какие признаки следует включить в модель, а какие можно исключить.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Почему нейроные сети усложняют добавлением слоев, а не количеством нейронов в слое?

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

🟠Иерархическое представление признаков
Глубокие нейронные сети способны изучать иерархию признаков. В случае глубоких сетей, таких как свёрточные нейронные сети (CNN), первые слои могут изучать базовые признаки, такие как границы и углы, средние слои учатся распознавать более сложные структуры (например, текстуры или части объектов), а глубокие слои могут выявлять высокоуровневые аспекты, такие как целые объекты или сложные сцены. Это иерархическое представление не может быть эффективно достигнуто просто увеличением количества нейронов в одном или нескольких слоях без увеличения глубины сети.

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

🟠Вычислительная эффективность
Хотя глубокие сети могут быть вычислительно более сложными для тренировки, использование методов, таких как свёртки (в CNN), позволяет сократить количество параметров по сравнению с полносвязными слоями того же размера. Это делает обучение глубоких сетей более эффективным по сравнению с попыткой обучить очень широкую сеть, где каждый слой содержит большое количество нейронов, что приводит к огромному количеству параметров и требует значительных вычислительных ресурсов.

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

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Где использование линейных моделей целесообразно?

Линейные модели применяются, когда данные линейно разделимы или зависимости между признаками и целевой переменной близки к линейным.
1. Они эффективны на высоких объёмах данных благодаря низкой вычислительной сложности.
2. Хорошо интерпретируемы, что важно в задачах с требованием объяснимости.
3. Используются в случаях, когда признаки предварительно масштабированы и очищены.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какие реализации бустинга есть?

AdaBoost, Gradient Boosting, XGBoost, CatBoost и LightGBM. Они различаются производительностью и подходами к построению деревьев.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В каких моделях используются несимметрические метрики?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Как делать прогноз для новых пользователей?

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

🟠Использование демографических данных
Если доступна информация о демографических характеристиках новых пользователей (например, возраст, география, пол), можно использовать эти данные для создания профилей, похожих на профили существующих пользователей, чьё поведение уже известно. Это позволяет применять модели, основанные на сходстве в демографических данных.

🟠Модели на основе сегментации
Создайте сегменты пользователей на основе доступных признаков и исторических данных о поведении и LTV в каждом сегменте. Для новых пользователей применяйте средние или медианные значения LTV соответствующего сегмента. Это подход часто используется как первичное приближение в отсутствие другой информации.

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

🟠Модели на основе поведения на ранних этапах
Анализируйте первые взаимодействия новых пользователей с продуктом. Иногда даже ограниченные данные о первых действиях могут дать представление о будущем поведении пользователя. Например, частота использования сервиса в первые дни после регистрации может быть хорошим предиктором долгосрочной вовлеченности.

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

🟠А/Б тестирование и непрерывное обучение
Проведение экспериментов и непрерывное обучение моделей на основе новых данных поможет уточнить и оптимизировать прогностические модели. Это позволяет адаптироваться к изменениям в поведении пользователей и улучшать точность прогнозов.

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

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# Предположим, X - признаки, а y - метки классов (0 - останется, 1 - отток)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LogisticRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)

print(classification_report(y_test, predictions))


Ставь 👍 и забирай 📚 Базу знаний
🤔 Что знаешь про early stopping?

Early stopping — это техника регуляризации, которая завершает обучение модели, если метрика качества на валидационном наборе перестаёт улучшаться. Это предотвращает переобучение, позволяя сохранить оптимальные параметры до ухудшения обобщающей способности. Метод основан на мониторинге функции ошибки или качества модели во время каждой итерации обучения.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1