I've not seen the reasons why you said that we should avoid heavy data operations in ViewModel? You mentioned about background thread, you means even if performed on background threads (e.g., using Coroutines) correct?
As I see the reason can be a alignment with the principles of clean architecture and ensures better code organization, maintainability, and performance.