Абстрактная сеть из синих и красных соединений данных на темном фоне.

Гибридное нейросимволическое обнаружение мошенничества: управление нейронными сетями с помощью правил предметной области.

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

Делиться

5013df89cacd36882ff3b1dd7b73327f

Абстрактный

Наборы данных о мошенничестве с кредитными картами крайне несбалансированы, с положительными результатами ниже 0,2%. Стандартные нейронные сети, обученные с использованием взвешенной бинарной кросс-энтропии, часто достигают высоких значений ROC-AUC, но испытывают трудности с выявлением подозрительных транзакций при использовании метрик, чувствительных к пороговым значениям. Я предлагаю гибридный нейросимволический (HNS) подход, который напрямую включает знания предметной области в целевую функцию обучения в виде дифференцируемой функции потерь правил — побуждая модель присваивать высокую вероятность мошенничества транзакциям с необычно большими суммами и нетипичными сигнатурами PCA. На наборе данных Kaggle о мошенничестве с кредитными картами гибридный подход достигает ROC-AUC 0,970 ± 0,005 при 5 случайных начальных значениях, по сравнению с 0,967 ± 0,003 для чисто нейронной базовой модели при симметричной оценке. Ключевой практический вывод: на несбалансированных данных стратегия выбора порогового значения влияет на F1 так же сильно, как и архитектура модели — обе модели должны оцениваться с использованием одного и того же подхода, чтобы любое сравнение было значимым. Код и материалы для воспроизведения доступны на GitHub.

Проблема: Когда ROC-AUC лжет

У меня был набор данных о мошенничестве с уровнем положительных результатов 0,17%. Я обучил взвешенную сеть BCE, получил ROC-AUC 0,96, и кто-то сказал: «Отлично». Затем я проанализировал распределение оценок и метрики, зависящие от порогового значения. Модель незаметно поняла, что предсказание «не мошенничество» для любых неоднозначных случаев — это путь наименьшего сопротивления, и ничто в функции потерь не противоречило этому решению.

Меня беспокоила не математика. Меня беспокоило то, что модель понятия не имела, как выглядит мошенничество. Начинающий аналитик с первого дня мог бы сказать: крупные транзакции подозрительны, транзакции с необычными PCA-сигнатурами подозрительны, и когда происходит и то, и другое одновременно, следует обязательно обратить на это внимание. Но эти знания… никогда не попадают в цикл обучения. Поэтому я провел эксперимент. Что если я закодирую эту интуицию аналитика в качестве мягкого ограничения непосредственно в функции потерь — чего-то, чему сеть должна удовлетворять, одновременно подгоняя метки? Результатом стала гибридная нейросимволическая (HNS) конфигурация. В этой статье подробно описан весь эксперимент: модель, функция потерь правил, лямбда-пробег и — что особенно важно — что на самом деле показывает правильный многоначальный дисперсионный анализ с симметричной оценкой порога.

Настройка

Я использовал набор данных Kaggle о мошенничестве с кредитными картами — 284 807 транзакций, 492 из которых являются мошенническими (0,172%). Признаки V1–V28 представляют собой компоненты PCA из анонимизированного исходного пространства признаков. Сумма и время — необработанные данные. Серьезный дисбаланс — вот в чем вся суть; именно здесь стандартные подходы начинают испытывать трудности [1].

Разделение выборки было 70/15/15 для обучения/валидации/тестирования, стратифицированное. Я обучил четыре модели и сравнил их напрямую:

  • Изоляционный лес — загрязнение = 0,001, подходит для всего обучающего набора данных.
  • Одноклассовый SVM — μ=0,001, подходит только для обучающих выборок, не содержащих мошенничество.
  • Чисто нейронная сеть — трехслойный многослойный персептрон с BCE + взвешиванием классов, без предметных знаний.
  • Гибридный нейросимволический — тот же MLP, но с дифференцируемым штрафом за проигрыш, добавляемым к правилу.

Методы Isolation Forest и One-Class SVM служат своего рода проверкой. Если контролируемая нейронная сеть с 199 тысячами обучающих выборок не может преодолеть планку, установленную неконтролируемым методом, об этом стоит знать, прежде чем публиковать результаты. Настроенная модель градиентного бустинга, вероятно, превзойдёт оба нейронных подхода; это сравнение предназначено для того, чтобы изолировать влияние функции потерь правил, а не для сравнения со всеми возможными методами. Полный код для всех четырёх методов доступен на GitHub.

Модель

Ничего экзотического. Трехслойный MLP с пакетной нормализацией после каждого скрытого слоя. Пакетная нормализация имеет большее значение, чем можно было бы ожидать — при сильном дисбалансе классов активации могут сильно смещаться без нее [3].

class MLP(nn.Module): def __init__(self, input_dim): super().__init__() self.net = nn.Sequential( nn.Linear(input_dim, 128), nn.ReLU(), nn.BatchNorm1d(128), nn.Linear(128, 64), nn.ReLU(), nn.BatchNorm1d(64), nn.Linear(64, 1) ) def forward(self, x): return self.net(x)

Для функции потерь используется BCEWithLogitsLoss с pos_weight — вычисляется как отношение количества случаев отсутствия мошенничества к количеству случаев мошенничества в обучающем наборе. На этом наборе данных это 577 [4]. Один случай мошенничества в пакете генерирует в 577 раз больший градиент, чем случай отсутствия мошенничества.

pos_weight = count(y=0) / count(y=1) ≈ 577

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

Поражение по правилу

Вот основная идея. Специалисты по анализу мошенничества эмпирически знают две вещи: необычно большие суммы транзакций вызывают подозрение, и транзакции, которые сильно отличаются от нормального поведения в пространстве PCA, также вызывают подозрение. Я хочу, чтобы модель присваивала высокие вероятности мошенничества транзакциям, которые соответствуют обоим сигналам — даже если в пакете нет помеченных примеров мошенничества.

Хитрость заключается в том, чтобы сделать правило дифференцируемым. Пороговое значение типа «если/иначе» — пометка любой транзакции, где сумма > 1000 — представляет собой жесткую ступенчатую функцию. Ее градиент равен нулю везде, кроме самой пороговой точки, где он не определен. Это означает, что обратному распространению ошибки не с чем работать; правило не выдает полезного сигнала градиента, и оптимизатор его игнорирует. Вместо этого я использую крутую сигмоидную функцию, центрированную на среднем значении пакета. Она аппроксимирует то же поведение порогового значения, но остается плавной и дифференцируемой везде — градиент мал вдали от границы и достигает пика вблизи нее, что именно там и нужно, чтобы оптимизатор обратил внимание. В результате получается плавная оценка подозрительности от 0 до 1:

def rule_loss(x, probs): # x[:, -1] = Сумма (последний столбец в creditcard.csv после удаления Class) # x[:, 1:29] = V1–V28 (компоненты PCA, столбцы 1–28) amount = x[:, -1] pca_norm = torch.norm(x[:, 1:29], dim=1) suspicious = ( torch.sigmoid(5 * (amount — amount.mean())) + torch.sigmoid(5 * (pca_norm — pca_norm.mean())) ) / 2.0 penalty = suspicious * torch.relu(0.6 — probs.squeeze()) return penalty.mean()

Примечание о том, почему именно норма PCA: признаки V1–V28 являются результатом преобразования PCA, примененного к исходным анонимизированным данным транзакций. Транзакция, находящаяся далеко от начала координат в этом сжатом пространстве, имеет необычную дисперсию по нескольким исходным признакам одновременно — это выброс в латентном представлении. Евклидова норма вектора PCA отражает это расстояние в одном скалярном значении. Это не специфическая уловка Kaggle. На любом наборе данных, где компоненты PCA представляют нормальную поведенческую дисперсию, норма этих компонентов является разумным показателем атипичности. Если ваши признаки не преобразованы с помощью PCA, вы можете заменить это соответствующим для предметной области сигналом — расстоянием Махаланобиса, показателем изоляции или z-баллом, специфичным для признака.

Член relu(0.6 – probs) — это ограничение: он срабатывает только тогда, когда предсказанная моделью вероятность мошенничества для подозрительной транзакции ниже 0,6. Если модель уже уверена (prob > 0,6), штраф равен нулю. Это сделано намеренно — я не наказываю модель за чрезмерную агрессивность в отношении подозрительных транзакций, а только за чрезмерную консервативность. Асимметрия означает, что правило никогда не сможет противостоять правильному прогнозу с высокой степенью уверенности.

Формально, общая цель состоит в следующем:

L_total = L_BCE + λ · L_правило

L_rule = E[ σ_susp(x) · ReLU(0,6 — p)]

σ_susp(x) = ½ · [ σ(5·(количество − ā)) + σ(5·(‖V₁₋₂₈‖ − среднее‖V‖)) ]

Гиперпараметр λ контролирует, насколько сильно правило срабатывает. При λ=0 вы получаете чисто нейронный базовый уровень. Полный цикл обучения:

for xb, yb in train_loader: xb, yb = xb.to(DEVICE), yb.to(DEVICE) logits = model(xb) bce = criterion(logits.squeeze(), yb) probs = torch.sigmoid(logits) rl = rule_loss(xb, probs) loss = bce + lambda_rule * rl optimizer.zero_grad() loss.backward() optimizer.step()

Настройка лямбда-зонда

Было протестировано пять значений: 0,0, 0,1, 0,5, 1,0, 2,0. Каждая модель обучалась до достижения наилучшего значения PR-AUC на валидационной выборке с ранней остановкой при patience=7 и seed=42:

Lambda 0.0 → Val PR-AUC: 0.7580 Lambda 0.1 → Val PR-AUC: 0.7595 Lambda 0.5 → Val PR-AUC: 0.7620 ← лучшее значение Lambda 1.0 → Val PR-AUC: 0.7452 Lambda 2.0 → Val PR-AUC: 0.7504 Лучшее значение Lambda: 0.5

Значение λ=0,5 немного превосходит другие значения по показателю PR-AUC при валидации. Разница между λ=0,0, 0,1 и 0,5 невелика — она находится в пределах диапазона дисперсии начальных значений, как показывает приведенный ниже многоначальный анализ. Значительное снижение при λ=1,0 и 2,0 предполагает, что агрессивное взвешивание правил может перекрывать сигнал BCE, а не дополнять его. На новых данных следует рассматривать λ=0 как значение по умолчанию и проверять, сохраняется ли улучшение на разных начальных значениях, прежде чем доверять этому значению.

Следует быть осторожным при выборе порогового значения: я вычислил оптимальное значение F1 на валидационном наборе данных и применил его к тестовому набору — симметрично для обеих моделей. На наборе данных с долей положительных результатов 0,17% оптимальная граница принятия решения находится далеко от 0,5. Применение различных стратегий пороговой обработки к различным моделям означает измерение разницы между пороговыми значениями, а не между моделями. В обоих случаях необходимо использовать один и тот же подход:

def find_best_threshold(y_true, probs): precision, recall, thresholds = precision_recall_curve(y_true, probs) f1_scores = 2*(precision*recall) / (precision+recall+1e-8) return thresholds[np.argmax(f1_scores)] # Применяется симметрично к ОБЕИМ моделям — только для набора значений hybrid_thresh, _ = find_best_threshold(y_val, hybrid_val_probs) pure_thresh, _ = find_best_threshold(y_val, pure_val_probs)

Результаты

Модель Ф1 PR-AUC РОК-АУК Отзыв при 1% ложноположительных результатов
Изоляционный лес 0.121 0,172 0,941 0,581
Одноклассовый SVM 0,029 0,391 0,930 0,797
Чисто нейронный (λ=0) 0,776 0,806 0,969 0,878
Гибрид (λ=0,5) 0,767 0,745 0,970 0,878

На этом исходном наборе данных гибридный и чистый базовый алгоритмы конкурентоспособны по показателю F1 (0,767 против 0,776) и идентичны по показателю Recall@1%FPR. Показатель PR-AUC у гибридного алгоритма ниже на этом конкретном исходном наборе данных (0,745 против 0,806). Наиболее чистый сигнал — ROC-AUC: 0,970 для гибридного алгоритма против 0,969 для чистого базового алгоритма. ROC-AUC не зависит от порогового значения и измеряет качество ранжирования по всем возможным пороговым значениям. Именно на этом участке наиболее последовательно проявляется ошибка правила.

Кривая точности-полноты

Кривая точности-полноты для гибридной нейросимволической модели (начальное значение = 42) показывает PR-AUC 0,745.

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

Матрица ошибок

Матрица ошибок для гибридной модели (начальное значение = 42) при пороговом значении, настроенном на основе валидации.

Распределение баллов

Гистограмма прогнозируемых вероятностей для классов «не мошенничество» (синий) и «мошенничество» (оранжевый) с использованием гибридной модели (начальное значение = 42).

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

Дисперсионный анализ — 5 случайных начальных значений

Результат, полученный с использованием одного начального значения на таком несбалансированном наборе данных, недостаточен для доверия. Я запускал обе модели с начальными значениями [42, 0, 7, 123, 2024], применяя оптимизированные по валидации пороговые значения симметрично к обеим моделям в каждом запуске:

Семена 42 | Гибрид F1: 0,767 PR-AUC: 0,745 | Чистый F1: 0,776 PR-AUC: 0,806 Семена 0 | Гибрид F1: 0,733 PR-AUC: 0,636 | Чистый F1: 0,788 PR-AUC: 0,743 Семена 7 | Гибрид F1: 0,809 PR-AUC: 0,817 | Чистый F1: 0,767 PR-AUC: 0,755 Семена 123 | Гибрид F1: 0,797 PR-AUC: 0,756 | Чистый F1: 0,757 PR-AUC: 0,731 Семена 2024 | Гибрид F1: 0,764 PR-AUC: 0,745 | Чистый F1: 0,826 PR-AUC: 0,763

Модель F1 (среднее значение ± стандартное отклонение) PR-AUC (среднее значение ± стандартное отклонение) ROC-AUC (среднее значение ± стандартное отклонение)
Чисто нейронный 0,783 ± 0,024 0,760 ± 0,026 0,967 ± 0,003
Гибрид (λ=0,5) 0,774 ± 0,027 0,740 ± 0,058 0,970 ± 0,005
Гистограмма, показывающая среднее значение и стандартное отклонение F1 и PR-AUC для 5 случайных начальных значений для чисто нейронных и гибридных моделей.

Три наблюдения из данных дисперсии. Гибрид выигрывает по показателю F1 в 2 из 5 случаев; чистый базовый вариант выигрывает в 3 из 5 случаев. Ни один из них не доминирует по метрикам, зависящим от порогового значения. Дисперсия PR-AUC гибрида заметно выше (±0,058 против ±0,026), что означает, что потеря правила делает некоторые инициализации лучше, а некоторые хуже — это показатель чувствительности, а не гарантированное улучшение. Единственный результат, который подтверждается без исключения: ROC-AUC выше для гибрида по всем 5 случаям. Это самый чистый сигнал из этого эксперимента.

Почему потеря правовых норм помогает ROC-AUC?

ROC-AUC не зависит от порогового значения — он измеряет, насколько хорошо модель оценивает мошенничество по сравнению с отсутствием мошенничества при всех возможных пороговых значениях. Устойчивое улучшение на протяжении 5 начальных значений является реальным сигналом. Вот что, по моему мнению, происходит.

При уровне распространенности мошенничества 0,172%, большинство пакетов из 2048 образцов содержат всего 3–4 помеченных примера мошенничества. Функция потерь BCE практически не получает градиента, связанного с мошенничеством, на большинстве пакетов. Функция потерь правил срабатывает на каждой подозрительной транзакции независимо от метки — она генерирует градиентные сигналы на пакетах, которые в противном случае почти ничего бы не сообщили оптимизатору о мошенничестве. Это обеспечивает модели последовательное направление на протяжении всего обучения, а не только на редких пакетах, где случайно появляются помеченные примеры мошенничества.

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

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

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

Оценка пороговых значений в несбалансированной классификации

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

На наборе данных с 0,17% положительных результатов оптимальный порог F1 значительно отличается от 0,5. Модель может ранжировать мошенничество почти идеально и при этом показывать низкие результаты по F1 при стандартном пороге, просто потому что границу принятия решения необходимо калибровать с учетом дисбаланса классов. Это означает, что если две модели оцениваются с использованием разных стратегий пороговой обработки — одна с фиксированным порогом, другая с порогом, оптимизированным по валидности, — вы сравниваете не модели, а разницу в пороговых значениях.

Практический контрольный список для корректного сравнения несбалансированных данных:

  • Обе модели оценивались с использованием одной и той же стратегии порогового значения.
  • Пороговое значение выбирается для данных валидации, никогда не используется для тестовых данных.
  • Показатели PR-AUC и ROC-AUC приводятся вместе с F1 — оба не зависят от порогового значения.
  • Различия между несколькими начальными значениями позволяют отделить реальные различия от случайной инициализации.

На что следует обратить внимание

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

Дисперсия PR-AUC увеличивается с увеличением значения функции потерь правила. Гибридное значение PR-AUC колеблется от 0,636 до 0,817 для разных начальных значений, тогда как для чистого базового значения — от 0,731 до 0,806. Правило, которое помогает при одних начальных значениях и вредит при других, требует проверки на нескольких начальных значениях, прежде чем делать выводы. Результаты, полученные на одном начальном значении, недостаточны.

Высокое значение λ ухудшает производительность. При λ=1,0 и 2,0 наблюдается существенное снижение PR-AUC в валидационной выборке. Агрессивное взвешивание правил может перекрывать сигнал BCE, а не дополнять его. Начните с λ=0,5 и проверьте на собственных данных, прежде чем увеличивать это значение.

Естественным расширением было бы сделать веса правил обучаемыми, а не фиксированными на уровне 0,5/0,5:

# Обучаемые комбинированные веса self.rule_w = nn.Parameter(torch.tensor([0.5, 0.5])) w = torch.softmax(self.rule_w, dim=0) suspicious = ( w[0] * torch.sigmoid(5 * (amount — amount.mean())) + w[1] * torch.sigmoid(5 * (pca_norm — pca_norm.mean())) )

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

Заключительные мысли

Функция потерь, основанная на правилах, действительно работает — улучшение ROC-AUC является стабильным и не зависит от порогового значения для всех 5 начальных значений. Улучшение по зависящим от порогового значения метрикам, таким как F1 и PR-AUC, находится в пределах шума и зависит от инициализации. Честно говоря, правила предметной области, внедренные в функцию потерь, могут улучшить базовое распределение оценок модели на данных о редких событиях, но величина улучшения сильно зависит от способа измерения и от того, насколько стабильно улучшение на разных начальных значениях.

Если вы работаете в сфере обнаружения мошенничества, выявления аномалий или в любой другой области, где помеченные положительные результаты редки, а знания в этой области обширны, стоит поэкспериментировать с этим шаблоном. Реализация проста — всего несколько строк кода поверх стандартного цикла обучения. Более важным является измерение: используйте симметричную оценку порогового значения, сообщайте метрики, не зависящие от порогового значения, и всегда запускайте несколько начальных значений, прежде чем доверять результату.

В репозитории находится полный цикл обучения, лямбда-пробег, анализ дисперсии и код оценки. Скачайте CSV-файл с Kaggle, поместите его в ту же директорию и запустите app.py. Приведенные выше результаты должны воспроизводиться — если на вашей машине это не работает, создайте заявку, и я изучу её.

Ссылки

[1] А. Даль Поццоло, О. Каэлен, Р.А. Джонсон и Г. Бонтемпи, Калибровка вероятности с недовыборкой для несбалансированной классификации (2015), IEEE SSCI. https://dalpozz.github.io/static/pdf/SSCI_calib_final_noCC.pdf

[2] Группа машинного обучения ULB, набор данных для обнаружения мошенничества с кредитными картами (Kaggle). https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud (Лицензия открытой базы данных)

[3] С. Иоффе и К. Сегеди, Пакетная нормализация: ускорение обучения глубоких нейронных сетей путем уменьшения внутреннего сдвига ковариат (2015), arXiv:1502.03167. https://arxiv.org/abs/1502.03167

[4] Документация PyTorch — BCEWithLogitsLoss. https://pytorch.org/docs/stable/generated/torch.nn.BCEWithLogitsLoss.html

[5] Экспериментальный код и материалы для проверки воспроизводимости. https://github.com/Emmimal/neuro-symbolic-fraud-pytorch/

Раскрытие информации

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

Источник: towardsdatascience.com

✅ Найденные теги: Гибридное, Мошенничества, нейронные сети, Нейросимволическое, новости, Обнаружение

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Постапокалиптический город с разрушенными роботами и растительностью.
Мужчина работает с роботом в мастерской, окружён инструментами на фоне.
Новый кондиционер Xiaomi охлаждает комнату за 30 секунд
Наушники различного цвета на столе, стильный дизайн для аудиофилов, выбор для музыки.
Четыре карты с цветовой индикацией температуры почвы и влажности.
Человек с чемпионским поясом на сцене, презентация достижений компании.
ideipro logotyp
Генеральный директор AMA: Технологии определяют то, как мы используем здравоохранение | Новости финансового сектора здравоохранения
Визуализация закономерностей в решениях: как структура данных влияет на стиль кодирования
Image Not Found
Новый кондиционер Xiaomi охлаждает комнату за 30 секунд

Новый кондиционер Xiaomi охлаждает комнату за 30 секунд

Компания Xiaomi представила новый напольный кондиционер Mijia Air Conditioner Giant Energy Saving Pro.  Внутри кондиционера установлены двухрядный конденсатор, мощный компрессор и вентилятор с поперечным потоком воздуха и лопастями диаметром 120 мм. Благодаря увеличенной на 10% площади теплообменника…

Мар 19, 2026
Наушники различного цвета на столе, стильный дизайн для аудиофилов, выбор для музыки.

Обновление внутри: что изменилось в AirPods Max 2

Компания Apple обновила полноразмерные наушники AirPods Max 2, сделав акцент на внутренние улучшения и добавив функции, которые уже стали стандартом для современных моделей.  Внешне новинка практически не изменилась: алюминиевый корпус, прочная стальная рама и фирменное оголовье остались…

Мар 19, 2026
Четыре карты с цветовой индикацией температуры почвы и влажности.

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

Пространственное распределение участков с различными (1) средней продолжительностью светового дня в течение летних дней (в часах), (2) нормализованным разностным снежным индексом — NDSI, (3) температурой поверхности земли в июне-августе, (4) температурой поверхности земли в сентябре-мае на разных…

Мар 19, 2026
Человек с чемпионским поясом на сцене, презентация достижений компании.

Дженсен Хуанг только что поднял прогнозы продаж Nvidia Blackwell и Веры Рубин до отметки в 1 триллион долларов.

Вкратце Источник изображения: Бенджамин Фанжой / Getty Images В понедельник во время своего выступления на открытии ежегодной конференции GTC в Сан-Хосе, штат Калифорния, генеральный директор Nvidia Дженсен Хуанг озвучил множество цифр — в основном технических. Но был…

Мар 19, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых