Если копнуть в историю, то yarn появился во времена, когда npm не знал про lock файлы, из за чего установка зависимостей могла занимать ооочень много времени.
Соответственно, когда появился yarn, его киллер фичей была генерация lock файла, которая позволяла сократить установку пакетов в разы.
Наверняка это не была единственная его фича, но в общем он грубо говоря стал "лучшей" версией npm'а.
Со временем npm тоже добавил lock файлы и стал гораздо быстрее, и с тех пор глобальной разницы в работе npm'а и yarn'а нет.
Однако yarn всё равно остается более удобным и user-friendly, у него более простой CLI, а также есть очень крутая фича под названием workspaces, которая нереально помогает в монорепных проектах.
Наверняка есть и другие фичи, которых нет в нпм, но это уже проще сравнить по докам, однако я в новых проектах всегда склоняюсь именно к yarn'у