I'd actually argue that strong vs. weak is a continuum and somewhat subjective. One of my gripes with Scala is that the type system (as used in the field) isn't strong enough. It will implicitly auto-promote types in ways you might not want (i.e. List[Int] :+ String = List[Any]). It can be a strong type system, but the quality of programmers has a huge influence on your experience with Scala. If you have bad programmers who do things the Enterprise Java Way, you can quickly end up with compile-speed issues. But that's another rant. Scala's great for mid-sized projects or when the developers are strong.
Wow, that seems to totally miss the point of using types to help you catch errors.
There have been attempts to fix this - WartRemover specifically has a Wart for any uses of Any for example.
Given that the language supports subtype polymorphism, this is exactly how the type inference should work. Any is the narrowest available supertype.
If you don't like it, there's a pretty simple fix: add an explicit type ascription, which you should be doing for the return values of any methods anyway.
The distinction between compile time failure and runtime failure is an important one, but not the only thing going on.