prod %>%drop_na(swai3) %>%count(swai3) %>%mutate(pct =prop.table(n),label = scales::percent(pct, accuracy =0.1)) %>%ggplot(aes(x ="", y = pct, fill = swai3)) +geom_bar(stat ="identity", width =1) +coord_polar(theta ="y") +theme_void() +labs(fill ="swai3", title ="Use of AI Meeting Notes Tools") +theme(legend.position ="right") +geom_text(aes(label = label), position =position_stack(vjust =0.5), size =3)
At this point, you may want to follow up with Figure 4.45 and Figure 4.46 in the study and note that while generic tools are more widely adopted, the most highly rated tool is an industry solution (Jump)
Breaking down the workweek by use of AI notes (50+ clients/advisor)
Show the code
prod %>%filter(swai3 !='', swai3 !='Unable to Classify', clxadv >=50) %>%drop_na(swai3) %>%group_by(swai3) %>%summarize(`Meeting Preparation`=mean(hrshrprep, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Meeting Preparation`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label = scales::percent(`Meeting Preparation`, accuracy =0.1)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Share of Workweek Preparing for Client Meetings',fill ='Use AI Notes') +scale_y_continuous(labels = scales::percent,limits =c(0, .15)) +theme_bw()
Show the code
prod %>%filter(swai3 !='', swai3 !='Unable to Classify', clxadv >=50) %>%drop_na(swai3) %>%group_by(swai3) %>%summarize(`Meeting Preparation`=mean(hrsprep, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Meeting Preparation`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label =round(`Meeting Preparation`, digits =2)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Weekly Hours Preparing for Client Meetings',fill ='Use AI Notes') +theme_bw()
Show the code
prod %>%filter(swai3 !='', swai3 !='Unable to Classify', clxadv >=50) %>%drop_na(swai3) %>%group_by(swai3) %>%summarize(`Client Service`=mean(hrshrclserv, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Client Service`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label = scales::percent(`Client Service`, accuracy =0.1)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Share of Workweek Doing Client Servicing',fill ='Use AI Notes') +scale_y_continuous(labels = scales::percent,limits =c(0, .15)) +theme_bw()
Show the code
prod %>%filter(swai3 !='', swai3 !='Unable to Classify', clxadv >=50) %>%drop_na(swai3) %>%group_by(swai3) %>%summarize(`Client Service`=mean(hrsclserv, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Client Service`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label =round(`Client Service`, digits =2)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Weekly Hours Doing Client Servicing',fill ='Use AI Notes') +theme_bw()
Share of Workweek Doing Meeting Prep by Use of AI Notes and Practice Structure (50+ clients/advisor)
Show the code
prod %>%filter(swai3 !='', clxadv >=50, swai3 !='Unable to Classify', pstructure !='' ) %>%drop_na(swai3, pstructure, pcycle) %>%group_by(pstructure, swai3) %>%summarize(`Meeting Preparation`=mean(hrshrprep, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Meeting Preparation`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label = scales::percent(`Meeting Preparation`, accuracy =0.1)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Share of Workweek Preparing for Client Meetings',fill ='Use AI Notes') +scale_y_continuous(labels = scales::percent,limits =c(0, 0.2)) +theme_minimal() +facet_wrap(~pstructure)
Show the code
prod %>%filter(swai3 !='', clxadv >=50, swai3 !='Unable to Classify', pstructure !='' ) %>%drop_na(swai3, pstructure, pcycle) %>%group_by(pstructure, swai3) %>%summarize(`Meeting Preparation`=mean(hrsprep, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Meeting Preparation`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label =round(`Meeting Preparation`, digits =2)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Weekly Hours Preparing for Client Meetings',fill ='Use AI Notes') +theme_minimal() +facet_wrap(~pstructure) +ylim(0,8)
Show the code
prod %>%filter(swai3 !='', clxadv >=50, swai3 !='Unable to Classify', pstructure !='' ) %>%drop_na(swai3, pstructure, pcycle) %>%group_by(pstructure, swai3) %>%summarize(`Client Service`=mean(hrshrclserv, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Client Service`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label = scales::percent(`Client Service`, accuracy =0.1)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Share of Workweek Servicing Clients',fill ='Use AI Notes') +scale_y_continuous(labels = scales::percent,limits =c(0, 0.25)) +theme_minimal() +facet_wrap(~pstructure)
Revenue Per Advisor By Use of AI Meeting Notes (50+ Clients/Advisor)
Show the code
prod %>%filter(clxadv >=50, swai3 !='Unable to Classify') %>%mutate(pstructure3 =ifelse(pstructure %in%c('Silo', 'Ensemble'),'Silo/Ensemble', pstructure)) %>%drop_na(swai3) %>%group_by(pstructure3, swai3) %>%summarize(`Revenue Per Advisor`=median(rvxadv, na.rm =TRUE)) %>%mutate(useai =ifelse(swai3 =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai3, levels =c('No', 'Industry', 'Generic')), y =`Revenue Per Advisor`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label =dollar(`Revenue Per Advisor`)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Median Revenue Per Advisor',fill ='Use AI Notes') +theme_minimal() +facet_wrap(~pstructure3, ncol =1) +ylim(0, 1000000)
Show the code
prod %>%filter(clxadv >=50, swai !='') %>%mutate(pstructure3 =ifelse(pstructure %in%c('Silo', 'Ensemble'),'Silo/Ensemble', pstructure)) %>%drop_na(swai) %>%group_by(pstructure3, swai) %>%summarize(`Revenue Per Advisor`=median(rvxadv, na.rm =TRUE)) %>%mutate(useai =ifelse(swai =='No', 'No', 'Yes')) %>%ggplot(aes(x =factor(swai), y =`Revenue Per Advisor`,fill = useai)) +geom_col(color ='black') +geom_text(aes(label =dollar(`Revenue Per Advisor`)), vjust =-0.5, size =5) +labs(x ='Use of AI Notes', y ='Median Revenue Per Advisor',fill ='Use AI Notes') +theme_minimal() +facet_wrap(~pstructure3, ncol =1)+ylim(0, 1000000)
2022-2024 Comparison
Here I’ve merged the 2022 and 2024 data like you’ve asked. Unfortunately, (1) the samples are small, ~100, so I can’t breakdown the AI notes people into industry/generic, and (2) the results aren’t meaningful at all.