Data Science | Вопросы собесов @easy_ds Channel on Telegram

Data Science | Вопросы собесов

@easy_ds


Разбираем вопросы с собеседований на Data Scientist.

Сайт: easyoffer.ru
Реклама: @easyoffer_adv

Решай тесты - t.me/+Kn2WW6VoGrZkNzky
Ищи работу - t.me/+Ir52wMvyEgo5YWIy

Data Science | Вопросы собесов (Russian)

Вы хотите успешно пройти собеседование на позицию Data Scientist? Тогда канал "Data Science | Вопросы собесов" (@easy_ds) - именно то, что вам нужно! Здесь мы разбираем вопросы, которые часто встречаются на собеседованиях для специалистов в области Data Science

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

Не упустите шанс улучшить свои навыки, подготовиться к интервью и узнать больше о том, как успешно проходить собеседования в сфере Data Science! Присоединяйтесь к нам прямо сейчас и станьте увереннее в своих знаниях и навыках.

Data Science | Вопросы собесов

09 Jan, 12:56


📊 Реклама в сети телеграм каналов easyoffer
✈️ Для заказа пишите @easyoffer_adv

easyoffer
Backend

Python | Вопросы
Python | Удалёнка
Python | LeetCode
Python | Тесты

Frontend | Вопросы
Frontend | Удалёнка
JavaScript | LeetCode
Frontend | Тесты

Java | Вопросы
Java | Удалёнка
Java | LeetCode
Java | Тесты

Тестировщик | Вопросы
Тестировщик | Удалёнка
Тестировщик | Тесты

Data Science | Вопросы
Data Science | Удалёнка
Data Science | Тесты

C# | Вопросы
C# | Удалёнка
C# | LeetCode
C# | Тесты

C/C++ | Вопросы
C/C++ | Удалёнка
C/C++ | LeetCode
C/C++ | Тесты

Golang | Вопросы
Golang | Удалёнка
Golang | LeetCode
Golang | Тесты

DevOps | Вопросы
DevOps | Удалёнка
DevOps | Тесты

PHP | Вопросы
PHP | Удалёнка
PHP | LeetCode
PHP | Тесты

Kotlin | Вопросы
Kotlin | Удалёнка
Kotlin | LeetCode
Kotlin | Тесты

Swift | Вопросы
Swift | Удалёнка
Swift | LeetCode
Swift | Тесты

📊 Реклама в сети телеграм каналов easyoffer
✈️ Для заказа пишите @easyoffer_adv

Data Science | Вопросы собесов

09 Jan, 09:10


🤔 Что известно про градиентный взрыв?

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

🚩Градиентный взрыв обычно происходит по нескольким причинам

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

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

🟠Нелинейные активации
Некоторые активационные функции, такие как tanh или ReLU, могут усиливать величину градиентов в зависимости от входных данных.

🚩Способы борьбы с градиентным взрывом

🟠Клиппинг градиентов (Gradient Clipping)
Это наиболее распространённый метод борьбы с градиентным взрывом. Он заключается в ограничении (обрезке) градиентов, когда они превышают определённый порог, что предотвращает слишком большие шаги обновления весов.

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

🟠Правильная инициализация весов
Использование методов инициализации, таких как инициализация Хе или Глорота (Xavier), может помочь предотвратить слишком высокие начальные величины градиентов.

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

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

08 Jan, 16:10


🤔 Чему равно P-value для выброса?

1. Для выбросов P-value зависит от статистического теста, используемого для их обнаружения (например, Z-тест, тест Граббса).
2. Выбросы обычно имеют P-value близкое к 0, если они значительно отличаются от остальных данных.


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

Data Science | Вопросы собесов

08 Jan, 09:10


🤔 Можно ли в линейную модель поместит категориальные признаки?

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

🚩Преобразование категориальных признаков

🟠One-Hot Encoding (OHE)
Каждый категориальный признак преобразуется в несколько бинарных (0 или 1) признаков. Например, если у вас есть признак "Цвет" с возможными значениями "Красный", "Зеленый" и "Синий", он будет преобразован в три бинарных признака: "Цвет_Красный", "Цвет_Зеленый" и "Цвет_Синий".
import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# Пример данных
data = pd.DataFrame({'Цвет': ['Красный', 'Зеленый', 'Синий', 'Красный']})

# Применение One-Hot Encoding
ohe = OneHotEncoder()
transformed_data = ohe.fit_transform(data[['Цвет']]).toarray()

# Преобразование обратно в DataFrame
ohe_df = pd.DataFrame(transformed_data, columns=ohe.get_feature_names_out(['Цвет']))


🟠Label Encoding
Категориальные значения преобразуются в числовые метки. Этот метод менее предпочтителен для линейных моделей, так как может ввести порядок между категориями, который на самом деле отсутствует.
from sklearn.preprocessing import LabelEncoder

# Пример данных
data = pd.DataFrame({'Цвет': ['Красный', 'Зеленый', 'Синий', 'Красный']})

# Применение Label Encoding
le = LabelEncoder()
data['Цвет_метка'] = le.fit_transform(data['Цвет'])


🚩Почему это нужно

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

🟠Улучшение предсказательной мощности
Правильное кодирование категориальных признаков позволяет модели лучше понять структуру данных и улучшить точность предсказаний.

🚩Пример использования в линейной регрессии

Предположим, у вас есть данные о ценах на квартиры, включая категориальный признак "Район" (центр, окраина, пригород). Мы можем использовать One-Hot Encoding для преобразования этого признака и включения его в линейную модель:
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import OneHotEncoder

# Пример данных
data = pd.DataFrame({
'Район': ['Центр', 'Окраина', 'Пригород', 'Центр'],
'Площадь': [50, 60, 70, 80],
'Цена': [200000, 150000, 120000, 250000]
})

# Применение One-Hot Encoding к категориальному признаку "Район"
ohe = OneHotEncoder(drop='first') # drop='first' чтобы избежать дамми-ловушки
encoded_districts = ohe.fit_transform(data[['Район']]).toarray()

# Объединение с исходными данными
encoded_df = pd.DataFrame(encoded_districts, columns=ohe.get_feature_names_out(['Район']))
final_data = pd.concat([data[['Площадь']], encoded_df], axis=1)

# Обучение линейной модели
model = LinearRegression()
model.fit(final_data, data['Цена'])

# Предсказание
predictions = model.predict(final_data)


Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

07 Jan, 16:10


🤔 Как использовать P-value, когда мы проверяем какую-то гипотезу?

1. P-value показывает вероятность того, что наблюдаемый эффект случайный.
2. Если P-value меньше уровня значимости (обычно 0.05), мы отвергаем нулевую гипотезу и принимаем альтернативную.
3. Если P-value больше 0.05, недостаточно доказательств для отклонения нулевой гипотезы.

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

Data Science | Вопросы собесов

07 Jan, 09:10


🤔 В чем разница между командами делит и транткейп?

Команды 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;


Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

06 Jan, 16:10


🤔 Какое минимальное количество данных необходимо для корректного проведения A/B теста?

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


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

Data Science | Вопросы собесов

06 Jan, 09:10


🤔 Какие проблемы могут возникнуть при проверке сразу 10 гипотез?

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

🟠Увеличение вероятности ошибок первого рода (ложноположительные результаты)
Когда проводится множество тестов, вероятность хотя бы одной ложноположительной ошибки возрастает. Это явление известно как проблема множественных сравнений. Если для каждой гипотезы используется уровень значимости \( \alpha = 0.05 \), то вероятность ложноположительного вывода по крайней мере для одной из десяти гипотез не будет 5%, а значительно выше. При 10 независимых тестах эта вероятность будет приблизительно \( 1 - (1 - 0.05)^{10} = 0.40 \), то есть 40%.

🟠Корректировки для множественных сравнений
Для управления увеличенным риском ошибок первого рода часто применяют корректировки. Одна из самых известных — корректировка Бонферрони, которая предполагает деление уровня значимости \( \alpha \) на количество тестов (в данном случае на 10). Это делает критерии для отклонения нулевой гипотезы более строгими, но в то же время увеличивает риск ошибок второго рода (ложноотрицательные результаты), когда истинные эффекты не обнаруживаются.

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

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

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

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

05 Jan, 16:10


🤔 Как оцениваешь, сколько тебе нужно ждать, пока идёт A/B тест?

1. Время ожидания зависит от объёма трафика и минимального значимого эффекта (MDE).
2. Для оценки можно использовать формулы расчёта выборки с учётом размера эффекта, уровня значимости (обычно 5%) и статистической мощности (обычно 80%).
3. Чем больше трафик и эффект, тем быстрее можно завершить тест.


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

Data Science | Вопросы собесов

05 Jan, 09:10


🤔 Как batch norm помогает в обучении моделей?

Batch Normalization (нормализация батчей) — это техника, которая улучшает обучение нейронных сетей путем нормализации промежуточных слоев. Это помогает ускорить обучение и делает модель более устойчивой. Впервые она была представлена в статье "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift" (2015) Сергеем Иоффе и Кристианом Шиллером.

🚩Как работает Batch Normalization?

🟠Нормализация данных:
В каждой мини-партии (batch) данных нормализация применяется к активациям нейронов. Это означает, что среднее значение активаций по партии становится равным нулю, а стандартное отклонение — единице.

🟠Обратное масштабирование и смещение:
После нормализации вводятся два параметра: \( \gamma \) и \( \beta \), которые масштабируют и смещают нормализованные значения: Эти параметры позволяют модели сохранить способность к обучению любых функций, независимо от нормализации.

🚩Плюсы

Ускорение обучения:
Нормализация уменьшает внутренний коварный сдвиг (internal covariate shift), что позволяет использовать более высокие скорости обучения.
Стабилизация градиентов:
Нормализация помогает избежать проблем с затухающими и взрывающимися градиентами, делая обучение более стабильным.
Регуляризация:
Batch Normalization оказывает легкий регуляризационный эффект, снижая необходимость использования других регуляризационных методов, таких как Dropout.
Меньшая зависимость от начальной инициализации:
Нормализация делает модель менее чувствительной к начальной инициализации параметров, упрощая настройку гиперпараметров.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, BatchNormalization, Activation
from tensorflow.keras.optimizers import Adam

# Создание модели
model = Sequential()

# Добавление слоев с Batch Normalization
model.add(Dense(64, input_shape=(784,)))
model.add(BatchNormalization())
model.add(Activation('relu'))

model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation('relu'))

model.add(Dense(10, activation='softmax'))

# Компиляция модели
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])

# Обучение модели
# model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))


Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

04 Jan, 16:10


🤔 Что представляет из себя Target Encoding?

Target Encoding заменяет категориальные переменные на среднее значение целевой переменной для каждой категории.
• Например, если целевая переменная — вероятность покупки, категория "A" будет заменена на среднее значение покупок для "A".
• Это полезно для моделей с сильным учётом категориальных зависимостей, но может привести к переобучению, если данные не обработаны правильно (например, без кросс-валидации).


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

Data Science | Вопросы собесов

04 Jan, 09:10


🤔 Какие методы обнаружения аномалии?

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

🚩Методы

🟠Статистические методы
Z-оценка (Z-score): Измеряет количество стандартных отклонений от среднего. Применимо для данных с нормальным распределением.Метод межквартильного размаха (IQR): Использует квартильные размахи для определения выбросов.

🟠Машинное обучение
Методы без учителя
K-Means: Кластеризует данные, выделяя аномалии на основе удаленности от центроидов. DBSCAN: Определяет аномалии на основе плотности данных. One-Class SVM: Обучается на одном классе данных, выделяя аномалии. Isolation Forest: Быстро изолирует аномальные точки с помощью случайных деревьев.
from sklearn.ensemble import IsolationForest

X_train = ...
clf = IsolationForest(contamination=0.1)
clf.fit(X_train)
y_pred = clf.predict(X_train)


🟠Методы с учителем
Используются при наличии размеченных данных (логистическая регрессия, решающие деревья и т.д.).

🟠Методы на основе временных рядов
Методы скользящего окна (Moving Average)
Выявляют аномалии путем анализа средних значений за периоды.
Методы автокорреляции
Анализируют повторяющиеся шаблоны во временных рядах.

🟠Глубокое обучение
Нейронные сети, кодирующие данные в низкоразмерное пространство и декодирующие их обратно. Высокие ошибки восстановления указывают на аномалии.
from keras.models import Model, Sequential
from keras.layers import Dense, Input

input_dim = X_train.shape[1]
encoding_dim = 14

input_layer = Input(shape=(input_dim, ))
encoder = Dense(encoding_dim, activation="tanh")(input_layer)
encoder = Dense(int(encoding_dim / 2), activation="relu")(encoder)
decoder = Dense(int(encoding_dim / 2), activation="tanh")(encoder)
decoder = Dense(input_dim, activation="relu")(decoder)
autoencoder = Model(inputs=input_layer, outputs=decoder)
autoencoder.compile(optimizer="adam", loss="mean_squared_error")

autoencoder.fit(X_train, X_train, epochs=100, batch_size=32, shuffle=True, validation_split=0.1)


Ставь
👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

03 Jan, 16:10


🤔 Можно ли в линейную модель поместить категориальные признаки?

Да, категориальные признаки можно использовать в линейной модели, но их необходимо предварительно закодировать.
• One-Hot Encoding: преобразует каждую категорию в отдельный бинарный столбец.
• Label Encoding: назначает каждой категории числовое значение.
• Выбор кодировки зависит от модели и размера данных.


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

Data Science | Вопросы собесов

03 Jan, 09:10


🤔 Чем хороша линейная регрессия?

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

🚩Плюсы

Простота и интерпретируемость
Линейная регрессия проста в понимании и интерпретации. Коэффициенты регрессии показывают, насколько изменится зависимая переменная при изменении независимой переменной на одну единицу.
Малое количество параметров
Для простой линейной регрессии требуется всего два параметра (угол наклона и пересечение с осью Y), а для множественной линейной регрессии – один параметр для каждого предиктора плюс один для пересечения с осью Y.
Быстрая и эффективная
Линейная регрессия вычислительно несложна и может быть быстро выполнена даже на больших наборах данных.
Применимость к различным задачам
Линейная регрессия может использоваться для прогнозирования, анализа взаимосвязей и тестирования гипотез.
Легкость в реализации
Она легко реализуется с использованием большинства стандартных библиотек машинного обучения, таких как scikit-learn в Python.

🚩Когда линейная регрессия особенно хороша

🟠Линейная зависимость
Когда между независимыми переменными и зависимой переменной существует линейная зависимость.
🟠Малое количество шумов
Когда данные относительно чистые и не содержат много выбросов или шумов.
🟠Простые модели
Когда сложные нелинейные модели не нужны, и простая модель дает достаточное качество предсказания.

Пример
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Пример данных
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1.5, 3.0, 4.5, 6.0, 7.5])

# Создание и обучение модели линейной регрессии
model = LinearRegression()
model.fit(X, y)

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

# Построение графика
plt.scatter(X, y, color='blue', label='Исходные данные')
plt.plot(X, y_pred, color='red', label='Линейная регрессия')
plt.xlabel('Независимая переменная')
plt.ylabel('Зависимая переменная')
plt.legend()
plt.title('Пример Линейной Регрессии')
plt.show()


Ставь
👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

02 Jan, 16:10


🤔 Когда нужно использовать метод главных компонентов в бизнесе?

Метод главных компонентов (PCA) используют, когда:
1. Необходимо уменьшить размерность данных, сохраняя максимальную вариативность.
2. Характеристики сильно коррелируют между собой.
3. Требуется ускорить работу алгоритмов и визуализировать высокоразмерные данные.


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

Data Science | Вопросы собесов

02 Jan, 09:10


🤔 Что такое precision ?

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

🚩Определение и формула

Precision определяется как отношение числа истинно положительных результатов (true positives, TP) к сумме истинно положительных и ложно положительных результатов (false positives, FP).

🚩Зачем это нужно

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

🚩Пример

Допустим, у нас есть система, которая предсказывает, является ли email спамом. Если система предсказала 100 писем как спам, и из них 90 действительно спам, тогда точность системы будет:
\[ \text{Precision} = \frac{90}{100} = 0.9 \]


Для расчета точности можно использовать библиотеку sklearn.metrics:
from sklearn.metrics import precision_score

# Истинные метки
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1]

# Предсказанные метки
y_pred = [0, 1, 0, 0, 1, 0, 0, 1, 1, 0]

# Расчет точности
precision = precision_score(y_true, y_pred)
print("Precision:", precision)


Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

01 Jan, 16:10


🤔 В чём отличия RoBERTa от BERT?

1. Обучение: RoBERTa использует больше данных и дольше обучается.
2. Маскирование: RoBERTa убирает предсказание следующего предложения (NSP), улучшая качество контекстного предсказания.
3. Производительность: RoBERTa показывает лучшие результаты на задачах обработки естественного языка благодаря улучшенной оптимизации.

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

Data Science | Вопросы собесов

01 Jan, 09:10


🤔 В чем разница между пивот и пивоттэйбл?

Функции pivot и pivot_table обе предназначены для реорганизации и сводки данных, но они используются в разных сценариях и имеют некоторые ключевые отличия.

🚩Метод pivot

Используется для преобразования данных из длинного формата в широкий. Он создаёт новый DataFrame, где один или несколько столбцов используются в качестве индексов, один столбец используется для столбцов новой таблицы, и один столбец для значений новой таблицы. Основное ограничение pivot заключается в том, что комбинация индекса и столбцов должна быть уникальной, иначе метод вызовет ошибку.
import pandas as pd

data = pd.DataFrame({
'date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'],
'variable': ['A', 'B', 'A', 'B'],
'value': [1, 2, 3, 4]
})

# Преобразование в широкий формат
pivot_df = data.pivot(index='date', columns='variable', values='value')
print(pivot_df)


🚩Метод pivot_table

Более сложный и гибкий, он используется для создания сводных таблиц. pivot_table может агрегировать данные по одному или нескольким ключам на основе суммы, среднего, максимума, минимума или других агрегатных функций. pivot_table также способен обрабатывать повторяющиеся значения за счёт агрегации.
import pandas as pd

data = pd.DataFrame({
'date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'],
'variable': ['A', 'A', 'B', 'B'],
'value': [1, 2, 3, 4]
})

# Создание сводной таблицы
pivot_table_df = data.pivot_table(index='date', columns='variable', values='value', aggfunc='sum')
print(pivot_table_df)


🚩Основные различия

🟠Уникальность данных
pivot требует уникальных пар индекс/столбец и выдаст ошибку в случае дубликатов. pivot_table может агрегировать дублирующиеся данные, используя функцию агрегации.
🟠Гибкость
pivot_table предлагает дополнительные параметры, такие как aggfunc, которые позволяют более гибко обрабатывать данные.

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

31 Dec, 16:10


🤔 Что такое градиентное затухание?

Градиентное затухание возникает, когда градиенты становятся слишком малыми, что замедляет или останавливает обновление весов в начальных слоях.
• Основная причина — использование функций активации с узким диапазоном, например, сигмоидной.
• Решения включают ReLU, He и Xavier инициализацию, а также архитектуры с пропускными соединениями (ResNet).


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

Data Science | Вопросы собесов

31 Dec, 09:10


🤔 Как объяснить бизнесу, что значат ошибки I и II рода?

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

🚩Объяснение

🟠Ошибка I рода (Ложно-положительный результат)
Возникает, когда мы отвергаем нулевую гипотезу, хотя она на самом деле верна. Представьте, что у вас есть система детекции мошенничества для онлайн-платежей. Ошибка I рода в этом контексте будет означать, что система пометила законную транзакцию как мошенническую. Клиенты могут быть недовольны блокировкой их законных транзакций, что может привести к потере доверия и уменьшению числа пользователей.

🟠Ошибка II рода (Ложно-отрицательный результат)
Происходит, когда мы не отвергаем нулевую гипотезу, хотя она на самом деле ложна. В системе детекции мошенничества, ошибка II рода будет означать, что система не распознала мошенническую транзакцию и пропустила её. Пропуск мошеннических транзакций может привести к финансовым потерям и возможным проблемам с репутацией.

🚩Объяснение на метафорах

🟠Ошибка I рода (Ложно-положительный результат)
Представьте, что у вас есть сигнализация в доме, которая должна срабатывать только в случае кражи. Ошибка I рода - это когда сигнализация срабатывает, даже если кражи нет, например, от шума ветра.
Последствия: Частые ложные срабатывания сигнализации могут вызвать недовольство и раздражение, возможно, вы даже решите отключить систему.

🟠Ошибка II рода (Ложно-отрицательный результат)
Теперь представьте, что сигнализация в вашем доме не срабатывает, когда происходит кража. Это и есть ошибка II рода.
Последствия: Вор может свободно украсть ваше имущество, и вы останетесь без защиты.

🚩Как ошибки влияют на бизнес

🟠Ошибка I рода
Маркетинговая кампания, направленная на привлечение новых клиентов, ошибочно определяет некоторых текущих клиентов как новых и отправляет им специальные предложения, что увеличивает расходы без получения новых клиентов.
Риски: Дополнительные расходы, снижение эффективности кампаний, ухудшение клиентского опыта.

🟠Ошибка II рода
Кампания по удержанию клиентов не распознает реальных клиентов, склонных к уходу, и не предпринимает мер для их удержания.
Риски: Потеря клиентов, снижение доходов, ухудшение клиентской базы.

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

30 Dec, 16:10


🤔 Что известно про градиентный взрыв?

Градиентный взрыв происходит, когда градиенты становятся слишком большими, что приводит к нестабильности обучения и невозможности сходимости модели.
• Это часто встречается в глубоких нейронных сетях или RNN при работе с длинными последовательностями.
• Для борьбы с проблемой применяют градиентное отсечение (Gradient Clipping), чтобы ограничить значения градиентов.


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

Data Science | Вопросы собесов

30 Dec, 09:10


🤔 Как сделать чтобы модель предсказывала не число, а распределение?

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

🟠Использование вероятностных моделей
Байесовские нейронные сети (Bayesian Neural Networks) расширяют обычные нейронные сети, вводя вероятностные параметры, что позволяет выводить распределение выходных значений. Библиотека Pyro для PyTorch
import torch
import pyro
import pyro.distributions as dist
from pyro.infer import SVI, Trace_ELBO
from pyro.optim import Adam
import pyro.nn as pnn

class BayesianNN(pnn.PyroModule):
def __init__(self, in_features, out_features):
super().__init__()
self.linear = pnn.PyroModule[nn.Linear](in_features, out_features)
self.linear.weight = pnn.PyroSample(dist.Normal(0., 1.).expand([out_features, in_features]).to_event(2))
self.linear.bias = pnn.PyroSample(dist.Normal(0., 10.).expand([out_features]).to_event(1))

def forward(self, x, y=None):
mean = self.linear(x)
sigma = pyro.sample("sigma", dist.Uniform(0., 10.))
with pyro.plate("data", x.shape[0]):
obs = pyro.sample("obs", dist.Normal(mean, sigma), obs=y)
return mean

def model(x, y=None):
return BayesianNN(x.shape[1], 1)(x, y)

def guide(x, y=None):
bayesian_nn = BayesianNN(x.shape[1], 1)
bayesian_nn.linear.weight = pnn.PyroSample(dist.Normal(torch.randn(bayesian_nn.linear.weight.shape), 0.1)
.expand(bayesian_nn.linear.weight.shape).to_event(2))
bayesian_nn.linear.bias = pnn.PyroSample(dist.Normal(torch.randn(bayesian_nn.linear.bias.shape), 0.1)
.expand(bayesian_nn.linear.bias.shape).to_event(1))
return bayesian_nn(x, y)

x = torch.randn(100, 1)
y = 3 * x + torch.randn(100, 1)

pyro.clear_param_store()
svi = SVI(model, guide, Adam({"lr": 0.01}), loss=Trace_ELBO())
num_iterations = 5000
for j in range(num_iterations):
loss = svi.step(x, y)
if j % 1000 == 0:
print(f"[iteration {j+1}] loss: {loss}")

predictive = pyro.infer.Predictive(model, guide=guide, num_samples=1000)
samples = predictive(x)


🟠Модели с гетероскедастичностью
Гетероскедастическая регрессия на Keras
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# Создание модели
inputs = keras.Input(shape=(num_features,))
x = layers.Dense(64, activation="relu")(inputs)
x = layers.Dense(64, activation="relu")(x)
mean = layers.Dense(1)(x)
log_var = layers.Dense(1)(x)
model = keras.Model(inputs=inputs, outputs=[mean, log_var])

# Функция потерь
def nll(y_true, y_pred):
mean, log_var = y_pred
precision = tf.exp(-log_var)
return tf.reduce_mean(0.5 * tf.math.log(2 * np.pi) + 0.5 * log_var + 0.5 * tf.square(y_true - mean) * precision)

model.compile(optimizer="adam", loss=nll)

# Обучение модели
model.fit(x_train, [y_train, y_train], epochs=100, batch_size=32)


Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

29 Dec, 16:10


🤔 Какие существуют способы кодирования категориальных переменных?

1. One-Hot Encoding: создаёт бинарные признаки для каждого значения.
2. Label Encoding: присваивает числовые значения каждому классу.
3. Target Encoding: заменяет категориальное значение на среднее целевой переменной.
4. Frequency Encoding: заменяет категории на их частоты.


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

Data Science | Вопросы собесов

29 Dec, 09:10


🤔 Почему нейроные сети усложняют добавлением слоев, а не количеством нейронов в слое?

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

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

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

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

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

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

28 Dec, 16:10


🤔 Что такое бэкпропагейшен?

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


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

Data Science | Вопросы собесов

28 Dec, 09:10


🤔 Как объяснить бизнесу метрику машинного обучения ?

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

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

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

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

🚩Accuracy (Точность)

Доля правильных предсказаний среди всех предсказаний.
Представьте, что у нас есть модель для классификации писем как "спам" или "не спам". Если точность модели составляет 90%, это означает, что модель правильно классифицирует 90% писем. Однако, если у вас есть сильный дисбаланс классов (например, 99% писем не являются спамом), высокая точность может быть обманчивой.

🚩Precision (Точность)

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

🚩Recall (Полнота)

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

🚩F1 Score (F1-мера)

Гармоническое среднее точности и полноты. F1-мера дает баланс между точностью и полнотой.
В задаче классификации сообщений как "спам" или "не спам", если у модели хороший баланс между точностью (не классифицировать "не спам" как "спам") и полнотой (обнаружить как можно больше "спам" сообщений), то у модели будет высокий F1 Score.

🚩ROC-AUC (Receiver Operating Characteristic - Area Under Curve)

Площадь под кривой ROC, которая показывает способность модели различать между положительными и отрицательными классами.
Если у вас есть модель для предсказания оттока клиентов, высокий ROC-AUC означает, что модель хорошо различает между клиентами, которые останутся, и клиентами, которые уйдут.

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

27 Dec, 16:10


🤔 Чем нейросеть отличается от бустинга над линейными моделями?

1. Нейросети:
o Используют сложные архитектуры и слои для моделирования нелинейных зависимостей.
o Требуют больших данных и мощных вычислительных ресурсов.
o Эффективны в задачах с неструктурированными данными (например, изображения, текст).
2. Бустинг над линейными моделями:
o Комбинирует простые модели (например, деревья решений) для повышения точности.
o Хорошо работает на табличных данных и менее требователен к ресурсам.
o Легче интерпретируется, чем нейросети.


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

Data Science | Вопросы собесов

27 Dec, 09:10


🤔 Расскажи о дистиляции?

Это метод компрессии модели, при котором большая, сложная модель ("учитель") передаёт свои знания более простой, компактной модели ("ученик"). Основная цель дистилляции — уменьшить размер модели или ускорить её выполнение без значительной потери точности.

🚩Как это работает?

🟠Большая модель ("учитель")
обучается на исходных данных и достигает высокой точности.
🟠Ученик-модель
обучается не только на исходных метках (labels), но и на выходах учителя (логитах или вероятностях), которые несут более богатую информацию, чем просто метки классов.

🚩Почему это полезно?

🟠Скорость и эффективность
Компактная модель работает быстрее, что важно для применения в устройствах с ограниченными ресурсами (мобильные устройства, IoT).
🟠Обобщающая способность
Ученик обучается на "знаниях" учителя, что помогает лучше обобщать данные.
🟠Уменьшение размера модели
Позволяет использовать сложные модели (например, трансформеры) в реальных приложениях, где важны ограничения по памяти.

🚩Основные этапы

🟠Подготовка учителя
Обучение сложной, точной модели.
🟠Генерация "мягких меток" (soft labels)
Учитель предсказывает вероятности (например, через softmax) для каждого класса. Эти вероятности используются вместо жёстких меток.
🟠Обучение ученика
Потери модели-ученика включают: Ошибку на мягких метках от учителя. Ошибку на исходных метках данных (если требуется).

🚩Температура

Температура используется для управления "мягкостью" вероятностей учителя. Формула Softmax с температурой:
P_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}


🚩Пример реализации дистилляции в PyTorch

import torch
import torch.nn as nn
import torch.optim as optim

# Пример потерь для дистилляции
class DistillationLoss(nn.Module):
def __init__(self, temperature=2.0, alpha=0.5):
super().__init__()
self.temperature = temperature
self.alpha = alpha
self.kl_div = nn.KLDivLoss(reduction="batchmean")
self.ce_loss = nn.CrossEntropyLoss()

def forward(self, student_logits, teacher_logits, labels):
soft_loss = self.kl_div(
nn.functional.log_softmax(student_logits / self.temperature, dim=1),
nn.functional.softmax(teacher_logits / self.temperature, dim=1)
) * (self.temperature ** 2)
hard_loss = self.ce_loss(student_logits, labels)
return self.alpha * hard_loss + (1 - self.alpha) * soft_loss

# Обучение модели ученика
def train_student(student_model, teacher_model, dataloader, epochs=10):
optimizer = optim.Adam(student_model.parameters(), lr=0.001)
criterion = DistillationLoss(temperature=3.0, alpha=0.7)

teacher_model.eval()
student_model.train()

for epoch in range(epochs):
for inputs, labels in dataloader:
with torch.no_grad():
teacher_logits = teacher_model(inputs)

student_logits = student_model(inputs)
loss = criterion(student_logits, teacher_logits, labels)

optimizer.zero_grad()
loss.backward()
optimizer.step()

print(f"Epoch {epoch+1}/{epochs}, Loss: {loss.item()}")


🚩Примеры использования

🟠Сжатие моделей NLP
GPT-3 → DistilGPT. BERT → DistilBERT. Эти модели сохраняют до 90% точности оригинала при меньшем размере и быстродействии.

🟠Компьютерное зрение
Большие сверточные сети (ResNet, EfficientNet) → компактные модели для мобильных приложений.

🟠Рекомендательные системы и голосовые помощники
Уменьшение размера модели для внедрения в реальном времени.

🚩Плюсы и минусы
Сокращает размер модели.
Ускоряет выполнение.
Улучшает обобщающую способность ученика.
Требуется заранее обученная модель-учитель.
Потенциальная потеря некоторой точности.

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

26 Dec, 16:10


🤔 В чём разница между бэггингом и бустингом?

1. Бэггинг (Bagging):
o Параллельное обучение множества моделей на случайных подмножествах данных.
o Устойчив к переобучению за счёт усреднения результатов.
o Пример: Random Forest.
2. Бустинг (Boosting):
o Последовательное обучение моделей, где каждая новая модель исправляет ошибки предыдущих.
o Склонен к переобучению, если не настроен правильно, но достигает высокой точности.
o Пример: Gradient Boosting, XGBoost, LightGBM.


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

Data Science | Вопросы собесов

26 Dec, 09:10


🤔 Какие методы регуляризации знаешь?

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

🟠L1 и L2-регуляризация (регуляризация норм L1 и L2)

L1-регуляризация (Lasso) В регуляризацию добавляется сумма абсолютных значений коэффициентов весов модели.
Формула: \( L1 = \lambda \sum_{i} |w_i| \), где \( \lambda \) — гиперпараметр регуляризации. Преимущество: Стимулирует разреженность, заставляя некоторые веса становиться равными нулю, что помогает в выборе признаков. Недостаток: Могут игнорироваться малые, но значимые признаки.

L2-регуляризация (Ridge):
Добавляется сумма квадратов весов модели.
Формула: \( L2 = \lambda \sum_{i} w_i^2 \).Преимущество: Регуляризует модель, не делая веса нулевыми, помогает в борьбе с мультиколлинеарностью.
Недостаток: Не отбирает признаки, оставляя их все
from sklearn.linear_model import Ridge, Lasso

# Ridge
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train, y_train)

# Lasso
lasso_model = Lasso(alpha=0.1)
lasso_model.fit(X_train, y_train)


🟠Dropout
Используется в нейронных сетях.
В процессе обучения случайно "выключает" часть нейронов, заставляя сеть учиться более устойчивым признакам.
Пример: при Dropout с вероятностью 0.5 половина нейронов в слое будет игнорироваться на каждой итерации.
Преимущество: Снижает зависимость от определённых нейронов, улучшая обобщающую способность сети.
import tensorflow as tf
from tensorflow.keras.layers import Dropout, Dense

model = tf.keras.Sequential([
Dense(128, activation='relu'),
Dropout(0.5), # Удаляем 50% нейронов
Dense(10, activation='softmax')
])


🟠Раннее прекращение обучения (Early Stopping)
Останавливает обучение, когда ошибка на валидационной выборке перестаёт уменьшаться. Преимущество: предотвращает переобучение без необходимости добавления дополнительной регуляризации. Недостаток: Может остановить обучение до достижения оптимального результата.
from keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=5)

model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stopping])


🟠Нормализация и стандартизация данных
Хотя это больше подготовка данных, правильное масштабирование (например, через Min-Max Scaling или Z-Score) может улучшить регуляризацию модели, сделав её более устойчивой к шуму.
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)


🟠Регуляризация через ограничение весов (Weight Constraint)
Вводятся ограничения на значения весов, например, они должны оставаться в пределах заданного диапазона.
from tensorflow.keras.constraints import MaxNorm
from tensorflow.keras.layers import Dense

layer = Dense(128, activation='relu', kernel_constraint=MaxNorm(3))


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

🟠Batch Normalization
Стабилизирует обучение, нормализуя выходы скрытых слоёв. Это также действует как лёгкая форма регуляризации.
from tensorflow.keras.layers import BatchNormalization

model.add(BatchNormalization())


🟠Сложные методы (Elastic Net и DropConnect)
Elastic Net: Комбинация L1 и L2-регуляризации. DropConnect: Аналог Dropout, но выключаются не нейроны, а их веса.

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

25 Dec, 09:10


🤔Чем функция инит в классе отличается от функции нью?

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

🚩__new__

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

🚩__init__

Метод инициализатор, который вызывается сразу после создания объекта. Он не создает новый объект, а настраивает объект, возвращенный new. init не возвращает значениеего задача — инициализировать различные атрибуты объекта.
Метод принимает экземпляр в качестве первого аргумента, за которым следуют аргументы, переданные в конструктор класса.

class MyClass:
def __new__(cls, *args, **kwargs):
print("Creating instance")
instance = super(MyClass, cls).__new__(cls)
return instance

def __init__(self, value):
print("Initializing instance")
self.value = value

# Создание объекта MyClass
obj = MyClass(10)
print(obj.value) # Выводит 10


🚩Когда использовать new

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

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

24 Dec, 16:10


🤔 Чем отличается градиентный спуск от SGD?

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

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

Data Science | Вопросы собесов

24 Dec, 09:10


🤔 Что знаешь о ML дизайне?

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

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

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

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

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

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

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

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

Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

23 Dec, 16:10


🤔 В чем отличия между чар и варчар?

CHAR — это фиксированная длина строки, которая всегда занимает определённое количество памяти. VARCHAR — это строка переменной длины, которая занимает ровно столько памяти, сколько нужно для хранения данных. VARCHAR более эффективен для данных с изменяемой длиной.

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

Data Science | Вопросы собесов

23 Dec, 09:10


🤔 Как считается метрика IoU?

Метрика IoU (Intersection over Union) используется для оценки качества совпадения предсказанной области с истинной областью в задачах сегментации или обнаружения объектов. Она вычисляется как отношение площади пересечения двух областей (предсказанной и истинной) к площади их объединения.

🚩Пример расчета IoU

🟠Предсказанная область:
допустим, у нас есть предсказанный прямоугольник с координатами \((x_1, y_1, x_2, y_2)\).
🟠Истинная область:
истинный прямоугольник с координатами \((x_1', y_1', x_2', y_2')\).

🚩Выполнение расчета пересечения и объединения:

1⃣Найти координаты пересекающегося прямоугольника:
\(\text{left} = \max(x_1, x_1')\)
\(\text{right} = \min(x_2, x_2')\)
\(\text{top} = \max(y_1, y_1')\)
\(\text{bottom} = \min(y_2, y_2')\)

2⃣Рассчитать площадь пересечения:
\(\text{Площадь пересечения} = \max(0, \text{right} - \text{left}) \times \max(0, \text{bottom} - \text{top})\)

3⃣Рассчитать площадь объединения:
\(\text{Площадь объединения} = \text{Площадь предсказанной области} + \text{Площадь истинной области} - \text{Площадь пересечения}\)
def calculate_iou(box1, box2):
"""
Вычисляет IoU для двух прямоугольников.
box1 и box2 — это списки или кортежи, содержащие координаты прямоугольника в формате (x1, y1, x2, y2)
"""
x1, y1, x2, y2 = box1
x1_prime, y1_prime, x2_prime, y2_prime = box2

# Вычисляем координаты пересекающейся области
xi1 = max(x1, x1_prime)
yi1 = max(y1, y1_prime)
xi2 = min(x2, x2_prime)
yi2 = min(y2, y2_prime)

# Вычисляем площадь пересечения
inter_width = max(0, xi2 - xi1)
inter_height = max(0, yi2 - yi1)
inter_area = inter_width * inter_height

# Вычисляем площади обоих прямоугольников
box1_area = (x2 - x1) * (y2 - y1)
box2_area = (x2_prime - x1_prime) * (y2_prime - y1_prime)

# Вычисляем площадь объединения
union_area = box1_area + box2_area - inter_area

# Вычисляем IoU
iou = inter_area / union_area

return iou

# Пример использования
box1 = (1, 1, 3, 3)
box2 = (2, 2, 4, 4)
print(f"IoU: {calculate_iou(box1, box2)}")


Ставь 👍 и забирай 📚 Базу знаний

Data Science | Вопросы собесов

22 Dec, 16:10


🤔 Какая скорость поиска в хэш-таблице

Скорость поиска в хэш-таблице (например, HashMap) в среднем составляет O(1), так как ключи напрямую отображаются в индекс с помощью хэш-функции. В худшем случае, при коллизиях, время поиска может увеличиваться до O(n), если хэш-таблица не оптимизирована или используется неэффективная стратегия разрешения коллизий. Однако в большинстве случаев эффективные хэш-функции и методы обработки коллизий поддерживают близкую к O(1) скорость.

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

Data Science | Вопросы собесов

22 Dec, 09:10


🤔 Какие проблемы могут возникнуть при прогнозе лтв на пол года вперед ?

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

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

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

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

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

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

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

🟠Технические ограничения
Ограниченные вычислительные ресурсы, неоптимальные инструменты анализа данных и недостаток квалификации аналитиков также могут ограничивать качество прогнозов LTV.

🟠Приватность и этические вопросы
Соблюдение приватности и защиты данных клиентов имеет важное значение. Использование данных, не соответствующих нормативным требованиям (например, GDPR в Европе), может привести к юридическим проблемам и потере доверия клиентов.

Ставь 👍 и забирай 📚 Базу знаний