Aspiring Data Science – Telegram
Aspiring Data Science
385 subscribers
465 photos
12 videos
12 files
2.15K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#trading #yan #balch

Юдж, оказывается, проходил курс Такера Балча "ML в трейдинге"! )

И особо ревностные студенты, кстати, написали по видосам курса лекции, что весьма удобно.

"Learning how to invest is a life skill, as essential as learning how to use a computer, and is one of the key pillars to retiring comfortably.

Specific to technical analysis, I learnt how people try to distill stock market movements (in price and volume) into technical indicators that can be traded upon automatically (e.g., Bollinger Bands, Moving Average Convergence Divergence, etc.). I’m still not fully convinced it works, but ¯(ツ)/¯. It was especially fun trying to frame stock market trading into a supervised learning problem for machine learning. What should the target be? Next day’s price (regression)? Whether or not to buy or sell (classification)? These are the key questions in machine learning that are seldom covered in most machine learning classes.

Well, I’m definitely NOT going to put my money on my self-developed trading algorithms, especially after seeing how they perform on the out-of-sample testing set. Nevertheless, the class was a good refresher on what I previously self-learnt on fundamental analysis and portfolio allocation—I will try to apply this to my own investment portfolio.

In addition, some of the techniques covered in sequential modelling are useful, and I will try applying them to the sequential healthcare data at work. Hope to share some positive results soon."

https://eugeneyan.com/writing/omscs-cs7646-machine-learning-for-trading/
1
#management #teamwork #yan

"Hiring is the most important thing everyone on the team can do to contribute to our success. We should always try to raise the bar by finding people who will improve the talent pool. Here’s how I identify such people:

What can this person (potentially) do better than everyone else on the team?
What can our team learn from this person?
Would I want to be part of a project led by this person?


As we hire people who raise the bar, training almost takes care of itself.

This doesn’t mean that we only hire people who have better qualifications or are more senior. Recent grads and juniors contribute infectious energy, a fresh pair of eyes, new ideas, and knowledge of the latest research and technology. Mentoring them is also rewarding for everyone on the team. We don’t need new hires to be better than everyone on the team now, but we should believe that they will surpass us in future.

Demos are a great way to promote learning. (If you adopt scrum, demos come as part of the process.) Everyone loves demos. Demo-ers are excited to share their work and get feedback. Attendees love learning more about what everyone else on the team is working on. Demos provide a way for the team to sync, learn from each other, and learn from the questions others may ask.

Another favorite practice is paper-lunches (aka lunch-and-learn). Every two weeks, two people share a paper each. Ideally, something they’re excited about and applicable to their work. They focus on understanding the paper thoroughly—this happens as part of project research anyway—and giving a quick walkthrough of it. The rest of the team is expected to read the paper beforehand and come prepared with questions and discussion points. In a year, the team would have discussed 50 papers!

A final approach is conducting reviews (e.g, code, design reviews). Reviews are not just a process for seniors to vet design documents and code; it’s also a learning and development opportunity. Reviewing pull requests is a great way for new joiners to ramp up on the codebase and standards. It’s also an avenue to clarify doubts and provide feedback.

One way to foster innovation is by sharing openly about failure. When team members confide their project and A/B testing anxieties, sharing about my flop puts them at ease. I also openly share our team’s failures and negative experiments (if the people involved are 100% okay with it). By doing so, I hope to inculcate the mindset—especially among stakeholders—that experimentation and failure learning are a key part of our work. As my old boss, John used to say: “That’s not a mistake; it’s an opportunity to learn!”

We also foster discipline through the standards we uphold (or tolerate). For example, we should have objective standards for linting, type checks, and functional tests. Another way is to actively share examples of great work (e.g., documents, deliverables) that meet and surpass our standards, so we have ideals to aspire towards.

While such standards can seem stifling, they provide more freedom in the medium-to-long term. Consistent processes and standards let us focus on the work that matters (instead of constantly reinventing processes or templates). And because everyone adopts the same standards, it’s much easier to understand and provide feedback on projects across the entire team, as well as fluidly move between projects as required.

Team bonding helps to build trust. With a high level of trust, there’s no more second-guessing. I know you’re critiquing my work because you objectively think there’s room for improvement, and not because you have something personal against me (i.e., Crocker’s Law). This lets us disagree openly and figure out the best possible outcome. It also saves time and cognitive capacity.

Gallup found that employees who have a best friend at work were twice as likely to be engaged. They were also less likely to be looking for, or watching for job opportunities, thus helping to improve retention."

https://eugeneyan.com/writing/data-science-teams/
1
#innovation #selfcriticism

In 1982, a seminal study examined the behavior of 50 R & D teams and explored the effect of the social phenomenon called Not Invented Here (NIH) Syndrome, which was described by the researchers as “the tendency of a project group of stable composition to believe it possesses a monopoly of knowledge of its field, which leads it to reject new ideas from outsiders to the likely detriment of its performance”.

In short, Not Invented Here Syndrome is a decision-making error where we tend to value our own ideas above those conceived by people outside of our group.

It’s been over 40 years since that study was conducted, but NIH Syndrome continues to stunt innovation in every industry–including edtech.

https://learnosity.com/edtech-blog/not-invented-here-syndrome-explained/
👍1
#hardware #tools

У меня дома есть похожий пылесос с док-станцией, правда, Ройдми. Брал за 30, не 130, правда ) Не прошло и полугода как внутри разлетелась турбина. Но радует, что прогресс не стоит на месте.


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

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

Кроме того, станция обеспечивает автоматическую очистку швабр горячей водой с температурой до 70 °C (можно настроить 4 температурных режима) и поддона для их мытья, используя двойной скребок. Это позволяет убрать остатки грязи, предотвратить возникновение неприятных запахов и обойтись без вмешательства человека для очистки вручную. Станция самостоятельно промывает и сушит вращающиеся швабры тёплым воздухом в течение 2 часов, чтобы предотвратить образование плесени и неприятного запаха, а после очищает поддон для их мытья.

Также Dreame X40 Ultra Complete оснащён улучшенной системой 3D сканирования помещения, что позволяет создать карту помещения, подобрать эффективные маршруты уборки и избегать столкновения с различным предметами на полу (распознаётся до 120 типов предметов, включая обувь, кабели и т.д.).

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

Dreame X40 Ultra Complete имеет систему управления Clean Genius, которая самостоятельно определяет тип комнаты, покрытия и предлагает наиболее оптимальную стратегию уборки. Clean Genius идеально подойдёт владельцам домашних питомцев, так как пылесос автоматически определяет наличие животного в комнате и проводит уборку с учётом безопасности и комфорта вашего любимца. Через приложение Dreamehome можно взаимодействовать домашними животными с помощью функции передачи голоса и контролировать их через встроенную в пылесос камеру.

Цена робота-пылесоса Dreame X40 Ultra Complete для ранних покупателей составит 129 990 руб."

https://3dnews.ru/1109554/flagmanskiy-robotpilesos-7v1dreame-x40-ultra-complete-predstavlen-v-rossii
#yan #feedback #selfcriticism

Feedback helps you learn. When you receive feedback, especially that which contradicts your existing views, you gain a perspective you might not have considered before. Learn from it and perhaps revise your outdated or incorrect knowledge.

“The illiterate of the 21st century will not be those who cannot read and write, but those who cannot learn, unlearn, and relearn. ” — Alvin Toffler

Feedback helps you make better decisions. When you get feedback, you might change your initial opinion or decision. Were you wrong previously? Does this show you didn’t really know what you were talking about? Well, not necessarily. Here’s the advice Jeff Bezos shared with 37signals (now Basecamp):

People who were right a lot of the time were people who often changed their minds. … The smartest people are constantly revising their understanding, reconsidering a problem they thought they’d already solved. They’re open to new points of view, new information, new ideas, contradictions, and challenges to their way of thinking.

Thus, changing your mind could help you arrive at better decisions. It’s kinda like SGD–take a quick decision, get feedback, update decision, repeat. With enough iterations, you arrive at global optima.

https://eugeneyan.com/writing/how-to-apply-crockers-law-for-feedback-and-growth/
1
#series #from

Когда-то давно захватил меня сериал Lost. Но довольно быстро стал раздражать нелогичностями и откровенными тупняками.

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

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

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

Крайне советую сериальчик From к просмотру (а потом и этот разбор).

И еще есть 2-я часть с новыми деталями.
#series #from

Ну и основное объяснение того, какие силы играют в городке From. Сначала казалось чушью, потом я понял, что эта индейская мифология с ведьмой и 3 демонами как раз и объясняет все кажущиеся несуразности сериала, и карты, и странные фигуры на заставке, и сценку с вороной и крысами.

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

https://www.youtube.com/watch?v=3fUnlb_p3sQ
#neuralnets #brain

"Ещё в 2014 году женщине с диагнозом эпилепсия была сделана операция по удалению крошечного участка cortex cerebri — ткани серого вещества головного мозга, покрывающей оба полушария тонким слоем. Группа учёных из Гарвардского университета взялась восстановить как можно более точную объёмную карту образца. Для этого ткани насытили тяжёлыми металлами, которые связались с липидным слоем мембран нервных клеток и проявили их для считывания электронным микроскопом. Затем ткани напитали отвердевающим раствором и нарезали на пластинки толщиной по 34 нм, после чего начали сканирование и составление карты.

Объём сырых данных по 2D-срезам составил 1,4 Пбайт. Для обработки информации по сшиванию изображений в один 3D-объект учёные запросили помощи у компании Google. Последняя предоставила ресурсы на основе систем машинного обучения. Кроме этого, учёные вручную раскрашивали ткани в самых сложных случаях и проверяли точность работы модели. Для лучшей визуализации самые маленькие клетки окрасили в синий цвет, а самые больше — в красный. Клетки промежуточных размеров получили свои цвета из обычной спектральной палитры.

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

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

https://3dnews.ru/1109605/pervaya-subkletochnaya-3dkarta-fragmenta-chelovecheskogo-mozga-okazalas-polna-zagadok-i-obiliem-kletokurodtsev
#python #codegems

Краткий обзор питоновских фич, появившихся после версии 3.6, которые я нашёл полезными и использую.

Python 3.7 (June 2018)
• Data Classes: Introduced dataclasses module for easy creation of classes storing data without needing to write boilerplate code.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p) # Output: Point(x=1, y=2)


Python 3.8 (October 2019)

• Assignment Expressions: Introduced the "walrus operator" (:=) to assign values within expressions.
numbers = [1, 2, 3, 4]
if (n := len(numbers)) > 3:
print(f"List is too long ({n} elements)") # Output: List is too long (4 elements)


• Positional-Only Parameters: Added syntax to specify positional-only parameters in function definitions using /.
def greet(name, /, greeting="Hello"):
return f"{greeting}, {name}!"

print(greet("Alice")) # Output: Hello, Alice!


• f-string Enhancements: f-strings now support the = specifier for self-documenting expressions.
value = 42
print(f"{value=}") # Output: value=42


• TypedDict: Introduced TypedDict in the typing module for creating dictionaries with a fixed set of keys and value types.
from typing import TypedDict

class Movie(TypedDict):
noscript: str
year: int

movie: Movie = {"noscript": "Inception", "year": 2010}


• Improved typing Module: Introduced Literal, Final, and TypedDict in the typing module.

Python 3.9 (October 2020)
• Type Hinting Improvements: Introduced | operator for union types (e.g., int | str), replacing typing.Union.
def add(x: int | float, y: int | float) -> int | float:
return x + y

• Dictionary Merging and Updating: Introduced | and |= operators for merging and updating dictionaries.
dict1 = {'a': 1}
dict2 = {'b': 2}
merged = dict1 | dict2
print(merged) # Output: {'a': 1, 'b': 2}


Python 3.10 (October 2021)
• Structural Pattern Matching: Introduced the match and case statements, allowing for powerful pattern matching similar to switch/case in other languages.
def http_status(status):
match status:
case 200:
return "OK"
case 404:
return "Not Found"
case _:
return "Unknown"

print(http_status(200)) # Output: OK


• Parenthesized Context Managers: Allowed using parentheses to combine multiple context managers in a single with statement.
with (
open('file1.txt') as f1,
open('file2.txt') as f2
):
print(f1.read(), f2.read())


Python 3.11 (October 2022)
• Exception Groups and except*: Introduced Exception Groups and the except* syntax
• Improved Typing: Introduced Self and added better support for typing variadic generics.
from typing import Self

class Builder:
def build(self) -> Self:
return self

b = Builder().build()


С pattern matching они имхо сильно пролажали, конструкцию типа case.. надо было добавлять много лет назад. А теперь, когда все приучились в питоне ставить эти уродливые блоки elif val op cond, они дали юзерам match, в 2021-м году. Ну не козлы? В 3.12 они этот match расширили, как водится в питоне, на какие-то сомнительные конструкции. То же сделали в 3.11 с Exception Groups and except*.

Вообще заметил, что в Питоне так всё делается: если и добавляется, то настолько всратая функциональность на таком гранулярном уровне, что нормальному человеку и в голову не придёт.
Возьмём модуль Logging. Казалось бы, нам нужно простое удобное логирование, но нет - получите цепочки, иерархии, хэндлеры, форматтеры, фильтры, пропагацию. То же и с match. И с модулем typing. И с появившимися в 3.11 Except*. Ну в чью больную голову могла прийти конструкция

try:
raise ExceptionGroup("Example", [ValueError("Bad value"), TypeError("Bad type")])
except* ValueError as e:
print("Caught ValueError:", e) # Output: Caught ValueError: [Bad value]

? А простые полезные вещи могут не делать не то что годами - десятилетиями. Только к версии 3.13 они додумались начать что-то делать с GIL-ом. Хочется выразиться дипломатическим языком Лаврова - "Дэбилы, бл#ть."
5
Forwarded from data hate (Артём Церех)
На заре своей карьеры я работал в компании Pfizer. Сейчас она известна благодаря одноименной вакцине. Но восемь лет назад, когда говорили о Pfizer, многие путали её с брендом шоколадок Fazer.

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

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

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

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

Поэтому я стараюсь обращать внимание даже на мелкие ошибки, потому что они могут быть признаками более существенных проблем.
3
Forwarded from data hate (Artem Tserekh)
Вы наверняка знаете про компания X5 Retail Group. В нее входят Пятерочка и Перекресток. Но не все знают, что раньше этой компании принадлежала торговая сеть “Карусель”. Сейчас эта сеть закрыта, а часть магазинов переделали в Перекресток. Но когда “Карусель”, еще не объявила о своем закрытии я там работал DS’ом в управлении, которое отвечало за целевой маркетинг. Но речь пойдет не про то, как там работалось.

Я как-то лазил по корпоративному порталу и наткнулся на интересную страницу. На ней были регулярно обновляющие фотографии из столовой. По сути это было видео с fps один кадр в 2-3 секунды, но реализовано это было в виде обновляющихся фотографий.

Это была еще доковидная эпоха. Поэтому я ходил в офис, обедал в столовой. В столовой были очереди. Неплохо было бы иметь телеграм бот, который бы информировал об очередях.

Тогда я написал скрипт, который забирает эти картинки с корпоративного портала. Я взял готовую модель, распознающую людей на фото. Все это запустил в бесконечном цикле и добавил сохранения в postgres. Потом я добавил график в Tableau и все готово. До прогноза очередей я не добрался. В телегу из корпоративной сети просто так писать нельзя поэтому я остановился только на сборе данных.

Особо интересных инсайдом не было. Самый большой пик посещаемости был в обед. Еще один поменьше - утром. От погоды зависимости я не обнаружил.
Forwarded from data hate
Как-то давно Яндекс проводил митам, где собирался рассказывать про беспилотники. Даже обещал что-то показать. Из-за ажиотажа и нежелания того, чтобы на митап попали журналисты было тестовое задание. Причем в отличие от других митапов Яндекса это были не совсем простые вопросы на 5 минут, а достаточно сложная задача.

Заключалась она в следующем. Есть “игра” или “среда”, которая представляет собой двумерное поле из клеток. Есть клетки, по которым можно двигаться, есть стены, через которые нельзя двигаться. В этом пространстве двигается ровер - робот доставщик. На поле спавнятся заказы. Эти заказы нужно было быстро доставлять. Чем быстрее доставил, тем больше очков получил. Если не успел доставить заказ за указанное время, то получил 0 очков. Это соревнование проводилось на платформе Яндекс.Контест. Топ N участников по очкам попадали на митап.

Как решать задачу? Для начала нужно представить поле в виде графа. А дальше уже дело техники. Проблема была в том, что из библиотек был только pandas и numpy и ничего для графов. Не было у них библиотеки networkx или аналога. Нужно было писать самому. Пришлось залезть в исходники networkx и по их мотивам реализовать граф и поиск кратчайшего пути. В итоге я написал свой mini-networkx и реализовал свой бейзлайн для движения ровера. Проходили не все тест кейсы, где-то падал по времени, где-то алгоритм ломался при нескольких одновременных заказах. Но где-то в топе я оказался. Кто написал мне на почту с предложением купить этот код. Но я не продался.

В итоге я попал в заветные топ N, но не смог пойти на митап, так как уехал в Сочи.
Forwarded from data hate
Есть такая библиотека pandas-profiling. Её суть в том, что ты берешь датафрейм и она выдает тепе EDA, то есть графики, гистограммы картинки про этот датафрейм по одному клику. Как понятно из названия датафрейм, который она принимает на вход - это pandas dataframe.

Много лет назад я искал аналог для spark'a. Тогда я обнаружил заглушку для библиотеки с названием spark-profiling https://pypi.org/project/spark-profiling. Там было написано To be released. С тех пор я каждые пол года захожу на эту страницу. Жду хоть каких-то обновление. а там все так же:

Released: Apr 27, 2020
Project denoscription: To be released