quinta-feira, 24 de fevereiro de 2011

Fichas de membros em MySQL

Já foi falado sobre Banco de Dados MySQL e Campos Interessantes em um banco MySQL. Agora será mostrado com criar uma ficha genérica para cadastro de membros. No caso em particular como já foi mencionado em postagens anteriores é interessante iniciar a ficha com um ID, no caso específico, um user_id como "bigint", "auto increment". Assim, pode se indexar tudo com esse ID e usar em comandos de REPLACE, para atualizar qualquer ficha do banco de dados.

Outros campos óbvios, para acesso a um site restrito, são os de login e senha. Além destes, poderá ter o nome completo (full_name), a data do aniversário do usuário, e seu respectivo nível (user_level).

Dependendo da situação poderá ter campos para datas importantes, tais como, criação da conta, expiração da conta e último login. Se o site for multilíngue, poderá ser necessário um campo para a língua preferida do usuário.

Poderá ter campo para status do usuário, ou atividade do usuário, conforme o caso. Pode ser útil ter campos para RG, expedidor, data de expedição, CPF, filiação, tipo sanguíneo, naturalidade, nacionalidade, título de eleitor, etc. E por fim poderá ser acrescentado um campo para comentários sobre o usuário.

Existem outros campos que são importantes, mas talvez não para a ficha do usuário. Por exemplo, é importante ter o email do usuário. Mas se colocar uma tabela adicional com os seguintes campos: email_ID, user_ID, user_email, email_status, então cada usuário poderá ter inúmeros emails cadastrados no site. O user_ID é o ID do usuário na tabela de membros. O administrador poderá saber pelo status se o email foi confirmado (clique no link no email, caso receba o email) ou não. Poderá até acrescentar um campo para indicar o email primário, ou a ordem de preferência dos emails, conforme o caso.

O número telefônico também é bastante interessante o administrador poder lançar mão, mas segue o mesmo raciocínio da tabela de email, uma tabela em separado, só para fones, contendo: fone_ID, user_ID, fone, fone_tipo (cel, fixo, etc.). Assim poderão ser cadastrados quantos fones quiser para cada usuário.

O endereço segue a mesma lógica. Inclui-se o endereço_ID, o user_ID, endereço, e o tipo (residencial, comercial, caixa postal, contato, etc.). No caso o endereço pode ser dividido em vários campos: end_1, end_2, numero, CEP, cidade, UF, país, obs., status, etc. Então cada cliente pode ter vários endereços cadastrados.

Para incluir outras informações, pode ser interessante criar uma tabela para cada coisa. Assim os usuários não ficam limitados a ter apenas um de cada coisa.

Caso seja previsto que haverá muita mudança nos dados em uma determinada tabela, poderá ser acrescentado um campo de "em uso". Assim, para deletar uma ficha, basta zerar o campo de "em uso". Na próxima vez que for escrever um novo dado, procura-se pela ficha com o campo zerado. Assim não ficam "buracos" no banco de dados, e não se esgotam os IDs tão rapidamente.

segunda-feira, 7 de fevereiro de 2011

Curvas ROC

Curvas ROC foram criadas na segunda guerra mundial para interpretar dados do radar e identificar aviões inimigos. A curva ROC é bastante útil para comparar resultados.

A curva ROC (Receiver Operating Characteristic) é utilizada para mostrar o grau de acerto ou de erro. Suponha que se tenha um paciente e quer saber se ele tem determinada doença. Aplica-se um teste e verifica o resultado. A interpretação resulta em 4 grupos:
1) Doentes classificados como doentes.
2) Doentes classificados como sãos.
3) Sãos classificados como sãos.
4) Sãos classificados como doentes.

Ou escrito de outra forma:
1) Correta aceitação.
2) Falsa rejeição.
3) Correta rejeição.
4) Falsa aceitação.

Obviamente os grupos 2 e 4 devem ser minimizados.


A curva ROC plota os dados de 0,0 a 1,1 da seguinte forma:
O eixo X é da falsa aceitação, e o eixo Y da correta aceitação. Portanto o ideal é uma reta de 0,0 para 0,1 e outra reta de 0,1 para 1,1. Veja a figura 1.

Se utilizar uma moeda (cara ou coroa) para determinar se está doente, iriamos obter uma reta de 0,0 para 1,1, cortando o quadrado no meio, diagonalmente, como na figura 2. Qualquer outra técnica utilizada deverá levantar a curva para o canto superior esquerdo. Quanto mais no canto, melhor a técnica. A figura 3 mostra uma curva ROC típica.



Também é comum usar a área abaixo da curva como medida de comparação entre diversas técnicas. A situação de cara ou coroa dá uma área abaixo da curva de 0,5. Qualquer outra técnica deve aumentar este número até chegar ao ideal que seria 1,0. Quanto mais alto o número, melhor a técnica de identificação.

Para um método de cálculo da área abaixo da curva veja este tutorial: Área Abaixo da Curva.