Joining subqueries with GROUP is slow
Explode-Implode

In the first derived table (voc) you have what call the "explode-implode" syndrone.  First the JOINs generate a lot of rows, then the GROUP BY whittles it back to a few rows.

Sometimes the solution is to turn a JOIN into a subquery:

SELECT  ...,
        b.foo
    FROM a
    LEFT JOIN b
    GROUP BY a.id


-->

SELECT  ...,
        ( SELECT foo FROM b WHERE ... = a... ) AS foo
    FROM a


Note that the GROUP BY goes away.  This example works especially well for LEFT JOIN because the "optional" nature of foo is preserved.

(The GROUP BY in cc is not the same situation.)

Derived JOIN Derived

MySQL is terrible (pre-5.6) or poor (5.6+) at dealing with JOINing two subqueries (voc and cc).

Plan A:  Turn one of those subqueries into a JOIN with the other.

Plan B:  Put one of the subqueries into a TEMPORARY TABLE and give it an appropriate index: (user_id).

Indexes

In the absence of SHOW CREATE TABLE, must do some guessing...

vos: INDEX(type, status, best_id)
b:   INDEX(date)
c:   INDEX(calltype, start, duration, user_id)


And change COUNT(id) to COUNT(*).

Note:  start BETWEEN '2017-02-04' AND '2017-05-04' is "inclusive".  Consider changing to

    start &gt;= '2017-02-04'
AND start  &lt; '2017-02-04' + INTERVAL 3 MONTH


Please provide EXPLAIN SELECT ... after adding those indexes.

I see a possible divide-by-zero; maybe you want

IFNULL(voc.bestvastonbep_count / cc.call_count, 0)