WordPress set taxonomy on post?

wp_set_post_terms() requires you to provide term id not the term name or slug when it is a hierarchical taxonomy.

From the codex:

For hierarchical terms (such as categories), you must always pass the
id rather than the term name to avoid confusion where there may be
another child with the same name.

Try the code below:

$term_id = term_exists( 'bus', 'category_type_bus' ); 
wp_set_post_terms( '2653', array( $term_id ), 'category_type_bus' );

The function get_term_by() also can be used instead of term_exists()

Hope it helps.