Qualquer organização financeira é um organismo vivo e seus processos são imperfeitos. As imperfeições do processo dão origem à insatisfação do cliente, que pode até se transformar em reclamações. Neste artigo, falaremos sobre nossa contribuição para o processo de automação implementando um pequeno projeto de Machine Learning.Você pode tentar resolver qualquer tarefa difícil usando métodos simples, e o Machine Learning não é exceção.O feedback é a informação mais valiosa; portanto, você deve estudar o máximo possível cada parte dela. Analisando reclamações de clientes, vemos objetivamente em quais problemas de processos de negócios surgem. Como os processos geralmente são interconectados, eles podem ser agrupados e considerados como um grupo. Assim, chegamos à tarefa padrão de Aprendizado de Máquina (ML) - "classificação multiclasse". Como resultado dessa análise, a tarefa foi resolvida - a coleção de análises consolidadas para a organização.A tarefa de classificação é uma tarefa na qual existem muitos objetos divididos em classes de uma certa maneira. No caso da classificação multiclasse, o número de classes deve ser superior a 2 e pode chegar a muitos milhares.Os dados sobre reclamações e respostas a eles são armazenados no servidor, o processo de descarregamento e pré-processamento é realizado como padrão por meio de uma solicitação ao banco de dados; na saída, obtemos um quadro de dados com os dados com os quais trabalharemos. A denúncia e a resposta são documentos bastante longos. Por exemplo, a resposta a uma reclamação pode chegar a centenas ou até milhares de palavras. Processar esse texto diretamente é muito caro (computacionalmente), e é por isso que o pré-processamento de texto é necessário.def review_to_wordlist(review):
review_text = re.sub('[^--]',' ', review)
words = review_text.strip().lower().split()
words = [w for w in words if not w in stop_words]
words = [morph.parse(w)[0].normal_form for w in words]
new_stop_words = find_names(words)
words = [w for w in words if not w in new_stop_words]
return words
A precisão de acordo com o modelo depende substancialmente da singularidade do texto; portanto, é necessário remover palavras do texto que não possuem muito significado - "palavras de interrupção". Geralmente, a composição das palavras inclui preposições, conjunções e outras partes insignificantes da fala. Também complementamos o dicionário de palavras de parada com o nome e o nome do meio.def find_names(words, prob_thresh = 0.4):
words = [w for w in words if 'str' in str(type(w))]
add_stop_words = [w for w in words for p in morph.parse(w) if 'Name' in p.tag and
p.score >= prob_thresh]
stop_words.update(add_stop_words)
return stop_words
Antes da implementação do projeto, a classificação era realizada manualmente, portanto, temos dados marcados por especialistas. E esta é uma tarefa clássica de ensino de ML com um professor. O texto pré-processado é reduzido para uma visualização que o modelo pode processar. Para fazer isso, traduzimos as respostas às reclamações em vetores de recursos (a variável independente usada no código é recursos, a variável dependente é rótulos).tfidf = TfidfVectorizer(sublinear_tf=True, min_df=5, norm='l2', encoding='utf8',
ngram_range=(1, 2), stop_words=stop_words)
features = tfidf.fit_transform(df_temp['Consumer_complaint_narrative'])
labels = df_temp['Num_bp']
A Classificação de vetores de suporte linear é selecionada para classificação. Isso foi feito pelos seguintes motivos:- alta eficiência ao trabalhar com medições de grande dimensão;
- trabalho estável em caso de excesso de dimensão sobre o número de amostras.
Este projeto foi preparado para implementação no baile. Todos os dias, o modelo realizará a classificação dos dados inseridos durante o dia útil. No estágio inicial, supõe-se uma verificação manual adicional do trabalho do modelo por um especialista. Uma vez por mês, o modelo será treinado novamente. A implementação deste projeto nos permitiu dar um passo mais perto do futuro!