Backend
3.95K subscribers
38 photos
717 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Что такое итератор?

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

🚩Основные аспекты итераторов

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

🟠Протокол итерации
В Python, чтобы объект был итерабельным, он должен реализовать метод __iter__(), который возвращает итератор.

🟠Итератор
Итератор — это объект, который реализует методы __iter__() и __next__(). Метод __next__() возвращает следующий элемент последовательности, а когда элементы заканчиваются, возбуждает исключение StopIteration.

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

Пример с использованием встроенного итератора
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers) # Получение итератора из списка

print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
print(next(iterator)) # Вывод: 3
print(next(iterator)) # Вывод: 4
print(next(iterator)) # Вывод: 5
# print(next(iterator)) # Вызывается StopIteration


Пример создания собственного итератора
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end

def __iter__(self):
return self

def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1

# Использование собственного итератора
my_iter = MyIterator(1, 5)

for num in my_iter:
print(num) # Вывод: 1 2 3 4


🚩Плюсы

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤯1
🤔 Слышали о жизненном цикле разработки ПО?

Да, SDLC (Software Development Life Cycle) – это процесс создания ПО, включающий:
1. Анализ требований – сбор информации о проекте.
2. Проектирование – создание архитектуры системы.
3. Разработка – написание кода.
4. Тестирование – поиск и исправление ошибок.
5. Деплой – развертывание продукта.
6. Поддержка – обновления и исправления.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
🤔 Какие связи с моделями в БД знаешь?

🚩"Один к одному" (One-to-One)

Каждая запись в одной таблице связана с одной и только одной записью в другой таблице.

Пользователь (User) и Паспорт (Passport)
Каждому пользователю соответствует один уникальный паспорт. В реляционных базах данных можно реализовать эту связь с помощью уникального внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE passports (
id SERIAL PRIMARY KEY,
user_id INTEGER UNIQUE,
passport_number VARCHAR(50),
FOREIGN KEY (user_id) REFERENCES users(id)
);


🚩"Один ко многим" (One-to-Many)

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

Пользователь (User) и Заказы (Orders)
Один пользователь может сделать много заказов, но каждый заказ связан с одним пользователем. Эта связь обычно реализуется с помощью внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id)
);


🚩"Многие ко многим" (Many-to-Many)

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

Студенты (Students) и Курсы (Courses)

Один студент может записаться на множество курсов, и каждый курс может быть записан многими студентами. Эта связь обычно реализуется с помощью промежуточной таблицы (таблицы связи), которая содержит внешние ключи обеих связанных таблиц.
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE courses (
id SERIAL PRIMARY KEY,
course_name VARCHAR(100)
);

CREATE TABLE student_courses (
student_id INTEGER,
course_id INTEGER,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);


🚩Варианты связей в нереляционных базах данных (NoSQL)

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

Вложенные документы
Например, в MongoDB документы могут включать вложенные документы или массивы, что позволяет моделировать отношения "один ко многим" и "многие ко многим" внутри одного документа.
{
"_id": 1,
"name": "John",
"orders": [
{ "order_id": 1, "order_date": "2023-08-01" },
{ "order_id": 2, "order_date": "2023-08-05" }
]
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое транзакция?

Это атомарная последовательность операций в базе данных, которая выполняется как единое целое. Она гарантирует целостность данных с помощью ACID-принципов:
- Atomicity (Атомарность) – все операции выполняются либо полностью, либо не выполняются вовсе.
- Consistency (Согласованность) – данные остаются в корректном состоянии после выполнения.
- Isolation (Изоляция) – параллельные транзакции не мешают друг другу.
- Durability (Долговечность) – изменения сохраняются даже при сбое системы.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 В чём разница между SQL и NoSQL?

Разница между SQL и NoSQL базами данных заключается в их архитектуре, структуре, методах хранения данных и использовании. Рассмотрим эти различия подробнее.

🟠Архитектура и структура данных
SQL (Structured Query Language) базы данных
Реляционные базы данных: SQL базы данных являются реляционными и используют таблицы для хранения данных. Каждая таблица состоит из строк и столбцов, что позволяет структурировать данные в виде отношений.
Схемы данных: SQL базы данных требуют четко определенных схем (schemas), которые строго контролируют структуру данных. Все записи в таблице должны следовать заранее определенной структуре.
Язык запросов: SQL использует структурированный язык запросов для манипуляции данными. Язык SQL стандартизирован и включает команды для создания, чтения, обновления и удаления данных (CRUD).
🟠NoSQL (Not Only SQL)
Нереляционные базы данных: NoSQL базы данных не обязательно используют таблицы для хранения данных. Вместо этого они могут использовать различные модели данных, такие как документы, графы, ключ-значение и столбцы
Гибкость схем: NoSQL базы данных часто не требуют фиксированных схем. Это позволяет хранить данные разной структуры в одной и той же коллекции или таблице.
Разнообразие языков запросов: В NoSQL базах данных отсутствует единый стандарт языка запросов. Они могут использовать различные методы доступа к данным, включая REST API и собственные языки запросов.

🚩Масштабируемость и производительность

🟠SQL базы данных
Вертикальная масштабируемость: SQL базы данных обычно масштабируются вертикально, то есть увеличивая мощность сервера (CPU, RAM, дисковое пространство).
Транзакции и консистентность: SQL базы данных поддерживают ACID транзакции (Atomicity, Consistency, Isolation, Durability), что обеспечивает высокую надежность и консистентность данных.
🟠NoSQL базы данных
Горизонтальная масштабируемость: NoSQL базы данных предназначены для горизонтального масштабирования, что позволяет распределять данные по множеству серверов.
Гибкость и скорость: NoSQL базы данных обычно более гибки и могут обеспечивать высокую производительность при работе с большими объемами данных и высокими нагрузками на запись и чтение.

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

🟠SQL базы данных
MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
Финансовые системы, системы управления запасами, системы управления клиентами (CRM), где требуется сложные запросы и транзакции.
🟠NoSQL базы данных
MongoDB, Cassandra, Redis, Couchbase.
Системы больших данных, реального времени аналитика, социальные сети, приложения для интернета вещей (IoT), где требуется высокая производительность и гибкость.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Почему синглтон называют антипаттерном?

Хотя паттерн Singleton обеспечивает глобальную точку доступа к объекту, он считается антипаттерном, потому что:
- Нарушает SRP (Single Responsibility Principle), смешивая управление объектом и его логику.
- Создает скрытые зависимости, усложняя тестирование.
- Увеличивает связность кода, усложняя поддержку и расширение.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
🤔 Что такое операция GROUP BY ?

Это конструкция SQL, используемая для группировки строк в таблице на основе значений одного или нескольких столбцов. Она часто используется в сочетании с агрегатными функциями (такими как COUNT, SUM, AVG, MAX, MIN), чтобы выполнять вычисления для каждой группы в результате запроса.

🚩Основные аспекты `GROUP BY`

🟠Группировка данных
Операция GROUP BY группирует строки, имеющие одинаковые значения в указанных столбцах, в одну группу.
🟠Агрегатные функции
В сочетании с GROUP BY часто используются агрегатные функции для выполнения вычислений на уровне групп, а не отдельных строк.

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;


Ставь
👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое спринт в Scrum?

Это фиксированный временной отрезок (обычно 1-4 недели), в течение которого команда Scrum работает над задачами из бэклога и выпускает инкремент продукта.
Основные события спринта:
1. Планирование (Sprint Planning) – выбираются задачи.
2. Ежедневные митинги (Daily Scrum) – синхронизация работы.
3. Демонстрация (Sprint Review) – показ результата.
4. Ретроспектива (Sprint Retrospective) – анализ ошибок и улучшений.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
🤔 Какие есть коды ответов HTTP?

Коды ответов HTTP — это трехзначные числовые коды, используемые для обозначения результата запроса клиента к серверу. Они помогают клиенту (например, браузеру) понять, как обрабатывать ответ. Все коды делятся на пять категорий:

🟠1xx: Информационные
Эти коды указывают, что запрос был получен, и процесс продолжается.
100 Continue: Клиент должен продолжать запрос.
101 Switching Protocols: Сервер переключается на другой протокол по запросу клиента.

🟠2xx: Успех
Эти коды указывают на успешное выполнение запроса.
200 OK: Запрос успешно выполнен, и сервер вернул нужные данные.
201 Created: Запрос успешно выполнен, и был создан новый ресурс.
202 Accepted: Запрос принят, но еще не обработан.
204 No Content: Запрос успешно выполнен, но в ответе нет содержимого.

🟠3xx: Перенаправление
Эти коды указывают, что клиент должен предпринять дополнительные действия для завершения запроса.
301 Moved Permanently: Ресурс был перемещен на постоянный новый URL.
302 Found: Ресурс временно находится по другому URL.
304 Not Modified: Ресурс не изменился с последнего запроса клиента.

🟠4xx: Ошибки клиента
Эти коды указывают на ошибки клиента при формировании запроса.
400 Bad Request: Некорректный запрос из-за синтаксической ошибки.
401 Unauthorized: Запрос требует аутентификации.
403 Forbidden: У клиента нет прав доступа к ресурсу.
404 Not Found: Ресурс не найден.
409 Conflict: Конфликт запроса с текущим состоянием ресурса.

🟠5xx: Ошибки сервера
Эти коды указывают на ошибки сервера при обработке корректного запроса клиента.
500 Internal Server Error: Внутренняя ошибка сервера.
501 Not Implemented: Сервер не поддерживает функциональность, необходимую для выполнения запроса.
502 Bad Gateway: Сервер получил некорректный ответ от вышестоящего сервера.
503 Service Unavailable: Сервер временно недоступен.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое SOLID?

SOLID – это пять принципов объектно-ориентированного программирования, повышающих читаемость и гибкость кода:
1. S – Single Responsibility Principle (Принцип единственной ответственности) – у класса должна быть только одна причина для изменения.
2. O – Open/Closed Principle (Принцип открытости/закрытости) – классы должны быть открыты для расширения, но закрыты для модификации.
3. L – Liskov Substitution Principle (Принцип подстановки Барбары Лисков) – подклассы должны заменять родительские классы без изменения поведения.
4. I – Interface Segregation Principle (Принцип разделения интерфейсов) – интерфейсы не должны заставлять классы реализовывать ненужные методы.
5. D – Dependency Inversion Principle (Принцип инверсии зависимостей) – классы должны зависеть от абстракций, а не от конкретных реализаций.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое CGI?

Это стандартный протокол для веб-серверов, который позволяет запускать внешние программы (скрипты) для генерации веб-страниц динамически. CGI скрипты могут быть написаны на различных языках программирования, таких как Perl, Python, PHP, C и других. Когда веб-сервер получает запрос на страницу, обрабатываемую CGI, он запускает соответствующий скрипт и передает ему данные запроса.

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

1⃣Запрос клиента: Клиент (например, веб-браузер) отправляет HTTP-запрос на веб-сервер.
2⃣Запуск CGI-скрипта: Веб-сервер определяет, что запрос предназначен для CGI-скрипта, и запускает его как отдельный процесс.
3⃣Передача данных: Веб-сервер передает данные запроса (например, параметры формы) в CGI-скрипт через стандартный ввод (stdin) и переменные окружения.
4⃣Выполнение скрипта: CGI-скрипт выполняет необходимые операции (например, доступ к базе данных) и генерирует HTML-страницу.
5⃣Ответ сервера: CGI-скрипт отправляет сгенерированную HTML-страницу обратно на веб-сервер через стандартный вывод (stdout), а сервер передает этот ответ клиенту.

🚩Плюсы

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

🚩Минусы

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

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

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

🚩Современные альтернативы

🟠FastCGI
Улучшенная версия CGI, которая повторно использует процессы для обработки нескольких запросов, что повышает производительность.

🟠Server-side scripting
Языки и фреймворки, такие как PHP, ASP.NET, Node.js, Django, Ruby on Rails, которые интегрируются непосредственно с веб-серверами и обеспечивают высокую производительность.

🟠Web Server Gateway Interface (WSGI)
Стандартный интерфейс для Python-приложений, позволяющий эффективную обработку запросов.

🟠Application Servers
Серверы приложений, такие как Apache Tomcat, JBoss, которые предоставляют контейнеры для выполнения веб-приложений и управления ими.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
🤔 В чем разница между PostgreSQL и MySQL?

1. Архитектура
- PostgreSQL – объектно-реляционная СУБД (поддерживает JSONB, XML, GIS).
- MySQL – реляционная СУБД (быстрее при простых операциях).
2. Производительность
- PostgreSQL – лучше работает с сложными запросами и большими объемами данных.
- MySQL – быстрее на чтении и простых операциях.
3. Расширяемость
- PostgreSQL – поддерживает кастомные типы данных, индексы, процедурные языки.
- MySQL – более ограничен в расширяемости.
4. Транзакции и ACID
- PostgreSQL – строго соблюдает ACID.
- MySQL – зависит от типа таблицы (InnoDB поддерживает ACID, MyISAM – нет).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
🤔 Что такое идемпотентность?

Идемпотентность — это свойство операции, при котором повторное выполнение этой операции приводит к тому же результату, что и однократное выполнение. Это понятие часто используется в контексте HTTP методов, API запросов и транзакций в системах с распределенной архитектурой.

🚩Основные аспекты идемпотентности

🟠Идемпотентные операции
GET: Получение ресурса. Повторный запрос не изменяет состояние ресурса.
PUT: Обновление или создание ресурса. Повторный запрос с одинаковыми данными приводит к одному и тому же состоянию ресурса.
DELETE: Удаление ресурса. Повторный запрос удаляет ресурс, если он существует, или не изменяет состояние, если ресурс уже удален.

🟠Неидемпотентные операции
POST: Создание нового ресурса. Повторный запрос приводит к созданию нового ресурса с новым идентификатором, что изменяет состояние системы.

🚩Примеры идемпотентности

GET запрос
  GET /user/123


PUT запрос
  PUT /user/123
{
"name": "John Doe",
"age": 30
}


Идемпотентная операция
  UPDATE users SET name = 'John Doe' WHERE id = 123;


Неидемпотентная операция
  INSERT INTO users (name, age) VALUES ('John Doe', 30);


🚩Зачем нужна идемпотентность

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

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

🟠Удобство разработки
Идемпотентность упрощает разработку и тестирование, так как позволяет предсказуемо управлять состоянием системы при повторных запросах.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Из чего состоит запрос на сервере?

HTTP-запрос включает:
1. Метод (GET, POST, PUT, DELETE) – определяет действие.
2. URL (Uniform Resource Locator) – адрес ресурса.
3. Заголовки (Headers) – передают метаданные (User-Agent, Content-Type).
4. Тело запроса (Body) – содержит данные (например, JSON).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое клиент серверная архитектура?

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

🚩Основные компоненты клиент-серверной архитектуры

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

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

🚩Принцип работы клиент-серверной архитектуры

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

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

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

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
🤔 Что такое рекурсия?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1🤯1
🤔 Что знаешь о принципах программирования KISS?

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

🚩Аспекты

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

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

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

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

🚩Примеры применения

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

🚩Плюсы

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Когда ROC AUC будет плохо определять качество классификатора ?

ROC AUC (Receiver Operating Characteristic - Area Under Curve) является популярной метрикой для оценки качества бинарного классификатора. Однако, в некоторых ситуациях использование ROC AUC может быть неэффективным или вводящим в заблуждение.

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

🟠Различная стоимость ошибок
Если ошибки различных типов (ложно положительные и ложно отрицательные) имеют разную стоимость, ROC AUC может неадекватно отражать качество модели. В таких случаях более подходящей метрикой может быть Precision-Recall Curve или специфическая метрика, учитывающая стоимость ошибок.

🟠Малое количество положительных примеров
При малом количестве положительных примеров (класса 1), ROC AUC может стать менее надежной, так как небольшое изменение в предсказаниях может существенно повлиять на значение метрики. В таких случаях Precision-Recall Curve и PR AUC могут предоставить более надежную оценку.

🟠Нестабильность при малых выборках
Может быть нестабильной и сильно зависеть от конкретного набора данных, особенно при небольших выборках. Это может привести к значительным колебаниям в оценках качества модели.
import numpy as np
import pandas as pd
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, precision_recall_curve, auc

# Создание несбалансированного набора данных
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10,
n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=42)

# Разделение на обучающую и тестовую выборки
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)

# Предсказание вероятностей
y_scores = model.predict_proba(X_test)[:, 1]

# Вычисление ROC AUC
roc_auc = roc_auc_score(y_test, y_scores)

# Вычисление Precision-Recall AUC
precision, recall, _ = precision_recall_curve(y_test, y_scores)
pr_auc = auc(recall, precision)

print(f"ROC AUC: {roc_auc}")
print(f"Precision-Recall AUC: {pr_auc}")


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какая разница между базами данных MySQL и NoSQL?

- MySQL (SQL) – реляционная БД, использует таблицы, строгие схемы, поддерживает JOIN, транзакции (ACID). Хорошо подходит для структурированных данных.
- NoSQL – нереляционные БД, хранят данные в документах (MongoDB), ключ-значение (Redis), графах (Neo4j), колоннах (Cassandra). Гибче в масштабировании, подходят для больших и изменяемых данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from easyoffer
На easyoffer 2.0 появится:
🎯 Тренажер "Проработка вопросов"

Метод интервальных повторений и флеш-карточки
Персональный подход изучения на основе ваших ответов
Упор на самые частые вопросы

📌 Интервальные повторения по карточкам это научно доказанный метод эффективного обучения. Каждая карточка – это вопрос, который задают на собеседовании, вы можете выбрать "Не знаю", "Знаю", "Не спрашивать". После ответа вам показывается правильный ответ и возможность изучить вопрос подробнее (примеры ответов других людей). От ваших ответов зависит то, как часто карточки будут показываться на следующей тренировке. Трудные вопросы показываются чаще, простые – реже. Это позволяет бить в слабые места. Кроме того, изначальный порядок карточек зависит от частотности (вероятности встретить вопрос).

🚀 Благодаря этому тренажеру вы сможете очень быстро подготовиться к собеседованию, т.к. фокусируетесь отвечать на самые частые вопросы. Именно так готовился я сам, когда искал первую работу программистом.

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

‼️ Очень важно, чтобы как можно больше людей поддержали проект в первые дни, по-этому те кто окажет поддержку первыми получат еще более выгодную стоимость на годовую подписку и существенный 💎 бонус о котором я позже расскажу в этом телеграм канале. Подписывайтесь, чтобы узнать о старте проекта раньше других и воспользоваться лимитированными вознаграждениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1