• Nenhum resultado encontrado

Suporte

Passada a fase de extra¸c˜ao dos dados, ´e poss´ıvel ent˜ao construir os modelos de Aprendizado de M´aquina. Nesta se¸c˜ao abordaremos o modelo SVM. ´E com ele que exe- cutamos a tarefa de Detec¸c˜ao de Falhas usando a Predi¸c˜ao.

A Predi¸c˜ao se d´a da seguinte forma: uma vez extra´ıdos os dados (parˆametros) de ativa¸c˜oes passadas, queremos predizer se uma nova ativa¸c˜ao com uma nova instˆancia de parˆametros ir´a executar corretamente ou produzir uma falha. As ativa¸c˜oes passadas s˜ao

32 obtidas a partir da fase de extra¸c˜ao, que vimos na se¸c˜ao anterior.

Antes de tornar poss´ıvel a predi¸c˜ao de uma ativa¸c˜ao a ser executada, precisamos construir o modelo preditor. Esta constru¸c˜ao passa por algumas fases. S˜ao elas: car- regamento dos dados extra´ıdos, transforma¸c˜ao dos dados, constru¸c˜ao do modelo em si, e avalia¸c˜ao do modelo. Essas fases fazem parte de um processo chamado de Knowledge Discovery in Databases (KDD). A Figura 3.3 ilustra o processo.

Figura 3.3: [39] Processo de KDD

A extra¸c˜ao dos dados neste trabalho engloba a fase de sele¸c˜ao do processo de KDD. A sele¸c˜ao ´e por meio da query especificada para extra¸c˜ao dos dados do banco de proveni- ˆencia do workflow. Nesta etapa, tamb´em podemos incluir a fase pr´e-processamento, uma vez que a query de extra¸c˜ao dever´a fazer o papel de buscar os dados relevantes e de quali- dade adequada para constru¸c˜ao do modelo. ´E importante frisar que para o modelo SVM precisamos tanto do conjunto de parˆametros de cada ativa¸c˜ao como tamb´em o resultado da mesma (sucesso ou falha) para atuar como a classe do mesmo, lembrando que o SVM tem o Aprendizado do tipo Supervisionado.

A transforma¸c˜ao dos dados do sistema faz parte da fase de mesma designa¸c˜ao no processo de KDD. Neste ponto, realiza-se a codifica¸c˜ao de dados categ´oricos em num´e- ricos, uma vez que o modelo SVM da biblioteca scikit-learn trabalha apenas com dados num´ericos. Importante frisar que essa transforma¸c˜ao n˜ao trouxe diferen¸cas significativas ao resultado. A biblioteca scikit-learn j´a conta com ferramentas que apoiam essa ques- t˜ao. Aqui tamb´em se faz a convers˜ao dos dados para estrutura numpy array [9] que s˜ao

poss´ıveis de serem utilizadas pelo modelo SVM do scikit-learn.

Ainda h´a um outro passo antes de se tornar poss´ıvel a constru¸c˜ao do modelo preditor. Ao extrair os dados executando a consulta SQL e pr´e-processar os dados fazendo os ajustes necess´arios, n˜ao foi realizada a divis˜ao dos dados entre atributos e vari´avel de classe. Essa divis˜ao se faz necess´aria para a constru¸c˜ao do modelo, pois s˜ao tratados como parˆametros de entrada diferentes para o treinamento.

´

E neste ponto que estamos aptos a construir o modelo de predi¸c˜ao que ir´a fazer a Detec¸c˜ao de Falhas. Esta etapa faz parte da fase de Minera¸c˜ao de Dados [26] do processo de KDD. Ressalta-se que a Minera¸c˜ao de Dados utiliza t´ecnicas de Aprendizado de M´aquina para alcan¸car seus objetivos.

No presente trabalho existe um la¸co entre a fase de constru¸c˜ao do modelo e da avalia¸c˜ao do mesmo. Utilizando uma t´ecnica denominada Stratified k-Fold Cross Valida- tion [36] ´e feita a avalia¸c˜ao de v´arios modelos constru´ıdos a partir de diferentes parti¸c˜oes geradas a partir da base de dados. O Stratified k-Fold Cross Validation ´e uma varia¸c˜ao do k-Fold Cross Validation, diferindo apenas por manter em cada uma das k parti¸c˜oes do conjunto de treinamento e teste a propor¸c˜ao de exemplos da classe de forma a manter a representa¸c˜ao do conjunto todo. Ou seja, se em um problema de classifica¸c˜ao bin´ario existirem 100 exemplos da classe A e 50 exemplos da classe B, e k = 10, ent˜ao cada fold ter´a 10 exemplos da classe A e 5 exemplos da classe B. Para cada execu¸c˜ao do processo de Cross validation, o conjunto de treinamento ter´a 10 × 9 = 90 exemplos da classe A e 5 × 9 = 45 exemplos da classe B. O conjunto de valida¸c˜ao, por sua vez, ter´a 10 exemplos dessa mesma classe A e 5 exemplos da classe B. Neste trabalho foi usado k = 5.

Dentre os modelos gerados, a escolha ´e feita utilizando o que possui a melhor pontua¸c˜ao. Esta m´etrica ´e uma m´edia da acur´acia em rela¸c˜ao ao conjunto de teste. No entanto, devido o desbalanceamento dos exemplos com rela¸c˜ao as classes na base de dados, para termos de avalia¸c˜ao do modelo, visto em 4.1, outras medidas ser˜ao consideradas, tais como: Precision, Recall e F-Measure

O trecho de c´odigo 3.1 ´e a implementa¸c˜ao de todas as etapas descritas at´e aqui. 1 def fit(self):

2 try:

3 self.notify("Running query...", ’SUP’) 4 data = self.query("SVM")

34 5 self.notify("Transforming data...", ’SUP’)

6 data = self.pre_processing_data(data)

7 self.notify("Extracting features and class...", ’SUP’) 8 X, y = self.extract_features_and_class(data)

9 X_train, y_train, X_test, y_test = self.split_train_test(X, y) 10 skf = StratifiedKFold(y_train, n_folds=self.n_folds)

11 self.notify("KFold training...", ’SUP’) 12 for train, test in skf:

13 X_fold = X_train[train] 14 y_fold = y_train[train]

15 fold_clf = SVC()

16 fold_clf.fit(X_fold, y_fold)

17 fold_score = fold_clf.score(X_train[test], y_train[test]) 18 if fold_score > self.validation_accuracy:

19 self.clf = fold_clf

20 self.validation_accuracy = fold_score 21 self.notify("Validation accuracy: " +

str(self.validation_accuracy), ’SUP’)

22 self.predict(X_test, y_test, env_type=’test’, clf_type=’SUP’) 23 self.notify("OK", ’SUP’)

24 except Exception as e:

25 self.notify("ERROR - " + str(e), ’SUP’)

C´odigo Fonte 3.1: Processo de constru¸c˜ao do modelo SVM para a Detec¸c˜ao de Falhas Nas linha 4, o sistema executa a consulta que foi definida na etapa de Extra¸c˜ao dos Dados e recupera os dados retornados pela consulta. A linha 6 mostra a chamada ao m´etodo respons´avel pelo pr´e-processamento dos dados, que para o caso do preditor SVM ´e a transforma¸c˜ao dos dados categ´oricos em num´ericos. A linha 8 apresenta a parte do c´odigo que fica respons´avel por separar os dados que ser˜ao tratados como atributos e vari´avel de classe. O m´etodo respons´avel por fazer a separa¸c˜ao entre os dados de treinamento e teste ´e mostrado na linha 9. Das linha 12 a 20 est´a o c´odigo que realiza o procedimento de treinamento em si. Para cada amostra diferente das parti¸c˜oes geradas pelo Stratified k-Fold Cross Validation, ´e gerado um modelo preditor. O if dentro deste loop ´e usado para escolher o melhor modelo dentre os gerados com os dados das parti¸c˜oes

do Stratified k-Fold Cross Validation, com rela¸c˜ao `a pontua¸c˜ao que possuir.

O procedimento visto no c´odigo 3.1 ´e o respons´avel pelo treinamento do modelo. A exibi¸c˜ao dessa tarefa ao usu´ario pode ser vista na Figura 3.4 (a). Terminada a fase de treinamento, o modelo est´a pronto para fazer predi¸c˜oes, e a Figura 3.4 (b), mostra como esta tarefa pode ser executada pelo usu´ario.

Figura 3.4: (a) Tela de exibi¸c˜ao de informa¸c˜oes do treinamento do classificador. (b) Tela de entrada de dados para predi¸c˜ao.

A tarefa de predi¸c˜ao tem como objetivo prever se ocorrer´a ou n˜ao falha em uma ativa¸c˜ao do workflow antes que a mesma seja de fato executada. Por isso, todos os dados hist´oricos relevantes a ativa¸c˜oes passadas do workflow devem ser definidos na consulta SQL. Na consulta SQL todas as colunas, com exce¸c˜ao da ´ultima, s˜ao considerados como atributos para o algoritmo de constru¸c˜ao do modelo, enquanto a ´ultima coluna ´e tra- tada como a vari´avel de classe. O modelo preditor que ´e usado ´e o que possuir a maior pontua¸c˜ao no processo de valida¸c˜ao cruzada do Stratified k-Fold Cross Validation.

Documentos relacionados