Cifrado GrimmXtract

20 09 2011

En muchas ocasiones tendremos la necesidad de ocultar cierta información de origen a ojos de sistemas informáticos de paso hasta depositarla en el destino.
Existen numerosísimos sistemas de cifrado, más complicados unos que otros, unos más simples que otros de “romper”. Denominando “romper” a la acción de encontrar la clave (o protocolo) de cifrado necesarios para interpretar el mensaje o información de forma correctos.
 
Ejemplo-1 (plano)


 
En una ocasión, me topé con la necesidad de intervenir en un cauce de información entre una aplicación abierta y un proceso centralizado (reservado). En esta necesidad, teníamos que priorizar la velocidad de proceso frente al recurso de espacio, es decir, los mensajes de media se estimaban muy cortos y por contra, no queríamos retrasar el proceso general al añadirle los procesos de cifrado o descrifrado.
 
Me inventé un método de cifrado que denominé GrimmXtract (extracción Grimm).


La situación era la siguiente:
          Una aplicación en Excel para recoger la información con formularios y que permite realizar un envío de la información como un anexo TXT en un email a un buzón centralizado.
          Un daemon recopila los correos (identificándolos por el asunto) y los agrupa, enviándolos vía FTP al Mainframe.
          Tras la transferencia FTP, se ejecutan los procesos planificados en el host para proceder a cargar los datos recibidos.
 
De entre todos los posibles algoritmos ideé uno en el que, en detrimento del espacio “ensucia” el contenido, haciéndolo inteligible a ojos de quien no conozca este protocolo de cifrado.
La técnica usada es bien sencilla.
Para cada carácter de entrada, se añade a la salida, se añade también un número que representará un salto de 1 a 9 posiciones adicionales, y se termina completando ese mismo número de chars aleatorios, y vuelta a empezar.
El proceso de lectura es bien sencillo. A la inversa, leemos un char de entrada, leemos el número de posiciones a saltar y las saltamos en la lectura, etc…
 
Añado un ejemplo, donde podemos observar como un texto cifrado se interpreta para componer el texto original, mucho más legible donde vamos a parar.
 


 
 
 
En este trabajo, la aplicación distribuida estaba desarrollada en Excel, por lo que se decidió añadir el componente de cifrado como un módulo añadido en visual Basic.
 
Sub crypt()
 
Dim ByteC As Byte
Dim MiCadena, charac
Dim MiCadena3 As Variant
Dim MiCadena2(30180)
Dim k, k2 As Integer
Dim i, ii As Integer
Dim r As Integer
Randomize
dir_trabajo = Worksheets(“Menu”).Cells(40, 3).Value
ChDir dir_trabajo
fic_trabajo = “Datos” & “.txt”
fic_trabajo2 = “Datos” & “.tmp”
fic_trabajo3 = “Datos” & “.bin”
Worksheets(“Menu”).Cells(40, 13).Value = dir_trabajo & “\” & fic_trabajo
Worksheets(“Menu”).Cells(140, 13).Value = dir_trabajo & “\” & fic_trabajo2
Open fic_trabajo For Binary Access Read Lock Write As #1
Open fic_trabajo2 For Binary Access Write Lock Read As #2
Get #1, , ByteC
Do While Not EOF(1)
Put #2, , ByteC
i = 0
r = (Rnd * 8) + 1
Put #2, , CByte(48 + r)
Do While (i r)
ByteC = CByte((Rnd * 255))
If ByteC Chr(13) And ByteC Chr(10) Then
Put #2, , ByteC
i = i + 1
End If
Loop
Get #1, , ByteC
Loop
Close #1
Close #2
Open fic_trabajo2 For Binary Access Read Lock Write As #4
Open fic_trabajo3 For Output Shared As #5
ii = 0
MiCadena = “”
Do While Not EOF(4)
Get #4, , ByteC
MiCadena = MiCadena & Chr(ByteC)
ii = Len(MiCadena)
If ii > 30180 Then
Print #5, MiCadena
MiCadena = “”
End If
Loop
Print #5, MiCadena
Close #4
Close #5
Open fic_trabajo3 For Append Shared As #3
Print #3,
Close #3
 
Set fs = CreateObject(“Scripting.FileSystemObject”)
fs.DeleteFile Worksheets(“Menu”).Cells(40, 13).Value, True
fs.DeleteFile Worksheets(“Menu”).Cells(140, 13).Value, True
Worksheets(“Menu”).Cells(40, 13).Value = dir_trabajo & “\” & fic_trabajo3
End Sub
 
 
En el otro extremo del cauce, en host, el primer proceso tras la recepción FTP sería el descifrado del contenido, para de este modo poder trabajar/cargar con los datos en plano. El lenguaje utilizado para este propósito fue easytrieve (adjunto código más abajo), aunque se puede diseñar el módulo de descifrado en Cobol u otro lenguaje, ya que no hacemos uso de nada más particular a parte de punteros de posicionamiento en arrays de bytes.
 
 
* FICHERO ENTRADA / CIFRADO
* longitud de 30180 = longitud-reg-max * 10
FILE FDESC
REG-LINEA 1 30180 A
* FICHERO SALIDA / DESCIFRADO
* longitud de 3018 = longitud-reg-max
FILE FSAL FB(3018 0)
SAL-LINEA 1 3018 A
* AREA DE ARRAYS DE CHARS
* se usan arrays de char y punteros para ir moviendo los CHARs
* válidos y no mover los no válidos o basura.
* W-LINEA -> W-LINEA-OUT
W-LINEA W 30180 A
W-CHAR W-LINEA 1 A OCCURS 30180
W-CHAR-N W-LINEA 1 N OCCURS 30180
W-LINEA-OUT W 3018 A
W-CHAR-OUT W-LINEA-OUT 1 A OCCURS 3018
* FLAG FIN;
FIN W 1 N VALUE 0
* FIN = 0 ; bucle normal
* FIN = 1 ; salto de linea de salida
* FIN = 2 ; fin de fichero
* FIN = 3 ; salto de linea de entrada (salto natural)
* FIN = 4 ; salto de linea de entrada (limite de registro)
* Punteros; WS-CONT
* _______/______________________
* (entrada) |_XY___ZA______________________| 30180
* \
* WS-SALTO
*
* WS-CONT-OUT
* _/____________
* (salida) |XZ____________| 3018
*
* (1) recogemos el valor X (valor desde WS-CONT)
* (2) recogemos el valor Y (valor para WS-SALTO)
* (3) saltamos ( posicion = posicion + WS-SALTO)
* (4) recogemos el valor Z (valor de WS-CONT)
* (5) recogemos el valor A (valor para WS-SALTO)
* (6) saltamos ( posicion = posicion + WS-SALTO)
*
WS-CONT W 6 N VALUE 0
WS-SALTO W 1 N VALUE 0
WS-CONT-OUT W 6 N VALUE 0
* PROCESO PRINCIPAL:
*
JOB INPUT NULL FINISH ESTADISTICAS
*——————————-
* la primera lectura del fichero …
GET FDESC
* Si el fichero no está vacio… trabajamos
IF NOT EOF FDESC
MOVE REG-LINEA TO W-LINEA
WS-CONT = 1
W-LINEA-OUT = ”
WS-CONT-OUT = 1
FIN = 0
* bucle principal, mientras haya datos de lectura / no sea fin
DO WHILE NOT EOF FDESC AND FIN < 5
* si hay salto de linea a la entrada…
IF FIN = 1
WS-SALTO = W-CHAR-N(WS-CONT)
WS-CONT = WS-CONT + WS-SALTO + 1
W-LINEA-OUT = ”
WS-CONT-OUT = 1
END-IF
* si hay salto de linea a la entrada (especial)…
IF FIN = 4
WS-SALTO = W-CHAR-N(1)
WS-CONT = WS-CONT + WS-SALTO + 1
END-IF
* inicializamos flags y salto
WS-SALTO = 0
FIN = 0
* DISPLAY ‘ WS-CONT = ‘ WS-CONT
* DISPLAY ‘ WS-CONT-OUT = ‘ WS-CONT-OUT
* DISPLAY ‘ W-CHAR = ‘ W-CHAR(WS-CONT)
* DISPLAY ‘ W-CHAR-OUT = ‘ W-CHAR-OUT
*
* recogemos el valor X (valor desde WS-CONT)
W-CHAR-OUT(WS-CONT-OUT) = W-CHAR(WS-CONT)
* si el valor recogido es limite o fin de linea,…
IF W-CHAR-OUT(WS-CONT-OUT) = X’0D’ +
OR W-CHAR-OUT(WS-CONT-OUT) = X’00’ +
OR W-CHAR-OUT(WS-CONT-OUT) = X’15’ +
OR W-CHAR-OUT(WS-CONT-OUT) = X’25’
W-CHAR-OUT(WS-CONT-OUT) = X’40’
WS-CONT-OUT = WS-CONT-OUT – 1
END-IF
* incrementamos punteros
WS-CONT-OUT = WS-CONT-OUT + 1
WS-CONT = WS-CONT + 1
* bucle interior, mientras no terminemos linea de entrada (30180)
* o lectura de valor no numerico de salto
* o salto del linea de entrada o fin de fichero
DO UNTIL FIN > 0 OR WS-CONT > 30180 +
OR W-CHAR-N(WS-CONT) X’F9′
* leemos el valor para el siguiente SALTO
WS-SALTO = W-CHAR-N(WS-CONT)
* validamos la cifra para el SALTO… ha de ser numerica
IF WS-SALTO > X’F0′ AND WS-SALTO <= X'F9'
* saltamos
WS-CONT = WS-CONT + WS-SALTO + 1
ELSE
FIN = 2
END-IF
* si todo va bien, seguimos…
IF FIN = 0
* si es fin de entrada…
IF WS-CONT > 30180
* OR WS-CONT-OUT > 3018
FIN = 3
*
ELSE
* recogemos el valor X (valor desde WS-CONT)
W-CHAR-OUT(WS-CONT-OUT) = W-CHAR(WS-CONT)
*
* si el valor recogido es fin de fichero…
IF W-CHAR-OUT(WS-CONT-OUT) = X’00’
W-CHAR-OUT(WS-CONT-OUT) = X’40’
WS-CONT-OUT = WS-CONT-OUT – 1
FIN = 2
ELSE
* si el valor recogido es fin de linea o
* si el valor recogido es retorno de carro (?)
IF W-CHAR-OUT(WS-CONT-OUT) = X’0D’ +
OR W-CHAR-OUT(WS-CONT-OUT) = X’15’ +
OR W-CHAR-OUT(WS-CONT-OUT) = X’25’
W-CHAR-OUT(WS-CONT-OUT) = X’40’
WS-CONT-OUT = WS-CONT-OUT – 1
FIN = 1
END-IF
END-IF
*
* incrementamos punteros
WS-CONT-OUT = WS-CONT-OUT + 1
WS-CONT = WS-CONT + 1
END-IF
END-IF
END-DO
* actualizar buffer de salida para posible escritura
SAL-LINEA = ”
MOVE W-LINEA-OUT TO SAL-LINEA
*
* validaciones varias;
IF WS-CONT = 30181 AND FIN = 0
FIN = 4
ELSE
IF WS-CONT > 30181
FIN = 3
ELSE
IF W-CHAR-N(WS-CONT) X’F9
FIN = 2
END-IF
END-IF
END-IF
*
DISPLAY ‘ ————————————– ‘
DISPLAY ‘ FIN = ‘ FIN
DISPLAY ‘ WS-CONT = ‘ WS-CONT
DISPLAY ‘ WS-CONT-OUT = ‘ WS-CONT-OUT
DISPLAY ‘ W-CHAR = ‘ W-CHAR(WS-CONT)
DISPLAY ‘ W-CHAR-OUT = ‘ W-CHAR-OUT(WS-CONT-OUT)
*
* si no es fin de fichero y no es fin de registro de entrada
* escribimos a la salida
IF W-CHAR-OUT(1) NE X’00’ AND FIN NE 3 AND FIN NE 2 +
AND W-CHAR(WS-CONT) NE X’40’ AND FIN NE 4
PUT FSAL
END-IF
* si no es fin de fichero y no es salto de linea
* es fin de registro de entrada
IF FIN NE 1 AND NOT EOF FDESC
*
* leemos siguiente entrada
IF FIN NE 2
GET FDESC
END-IF
*
IF FIN = 4
WS-CONT = WS-CONT – 30180
END-IF
*
* actualizamos puntero de lectura y flag de fin
IF NOT EOF FDESC AND FIN NE 4
* si es un final de registro natural, seguimos leyendo por el
* siguiente en orden de continuación de por donde íbamos…
IF FIN = 3
W-LINEA = ”
MOVE REG-LINEA TO W-LINEA
WS-CONT = WS-CONT – 30180
* si al final hubo una lectura malformed, … reiniciamos
* contadores.
ELSE
DISPLAY ‘ MALFORMED !! ‘ WS-CONT
DISPLAY ‘ MALFORMED !! ‘ W-CHAR(WS-CONT)
*
WS-CONT = WS-CONT – 2
WS-CONT-OUT = WS-CONT-OUT – 1
DISPLAY ‘ NEW_POS = ‘ WS-CONT
DISPLAY ‘ NEW_VALOR <= ' W-CHAR(WS-CONT)
W-CHAR-OUT(WS-CONT-OUT) = W-CHAR(WS-CONT)
WS-CONT-OUT = WS-CONT-OUT + 1
WS-CONT = WS-CONT + 1
WS-SALTO = W-CHAR-N(WS-CONT)
DISPLAY ‘ SALTO = ‘ WS-SALTO
WS-CONT = WS-CONT + WS-SALTO + 1
DISPLAY ‘ NEW = ‘ W-CHAR(WS-CONT)
END-IF
*
IF FIN < 4
FIN = 0
END-IF
END-IF
END-IF
END-DO
END-IF
STOP.
*——————————————————————–
ESTADISTICAS. PROC
*——————————————————————–
DISPLAY ‘*—————————————————–*’
DISPLAY ‘*—- PROGRAMA AJP8040 – *’
DISPLAY ‘*—————————————————–*’
DISPLAY ‘* FICHERO ENTRADA …………..:’ FDESC:RECORD-COUNT
DISPLAY ‘* FICHERO SALIDA …………..:’ FSAL:RECORD-COUNT
DISPLAY ‘*—————————————————–*’
END-PROC.
 
 
 
En breve añadiré otros post sobre otros métodos de cifrado mucho más complejos, aunque como se ha podido observar, no hace falta inventar protocolos muy complicados para dejar un texto ilegible al ojo humano. De hecho, el resultado parece un contenido binario puro.
 
Ejemplo-1 (cifrado con el GrimmXtract)


 
NOTA: por cierto, el nombre de Extracción Grimm lo ideé en honor a la multitud de cuentos de los hermanos Grimm, donde los niños recuperaban el camino andado gracias a que iban recogiendo las “semillas” de pan que habían ido dejando. En cierto modo, este procedimiento es lo mismo.
 
Un Saludo y a disfrutar.

Anuncios




Distancia de Levenshtein

4 08 2011

Hoy hemos tenido que enfrentarnos en el trabajo a un problema, bastante típico hoy en día por lo que creo.

En resumidas cuentas, tenemos una entidad donde alojamos las direcciones fiscales/postales asociadas a cada cliente-contrato.
El problema viene cuando nos percatamos que en numerosas ocasiones se han censado varias direcciones para la misma persona, en momentos diferentes, y mira tu por donde, muchas veces es la misma dirección, aunque no el mismo string.
Por ejemplo: “Avenida Caracol” “Avd. Caracol”, etc….
El foco del problema, la entrada manual de datos y la ausencia de un mecanismo de chequeo y alerta previo a la inserción.

Rebuscando entre mis neuronas alertagadas los residuos de criptografía y codificación, recordaba de la existencia de una distancia de Hamming y unos procedimientos basados en dichas distancias para “medir” la diferencia entre claves, entre un código y otro, o dicho de otro modo, en última instancia debía valer algo parecido para cadenas de chars.

Pues si, lo hay.

 

Se le llama Distancia de Levenshtein o distancia de edición al número mínimo de operaciones requeridas para transformar una cadena de caracteres en otra.

Es útil en programas que determinan cuán similares son dos cadenas de caracteres, como es el caso de los correctores de ortografía, el famoso T9 (supongo), etc…


Según wikipedia, 

En Teoría de la información y Ciencias de la Computación se llama Distancia de Levenshtein, distancia de edición, o distancia entre palabras, al número mínimo de operaciones requeridas para transformar una cadena de caracteres en otra. Se entiende por operación, bien una inserción, eliminación o la sustitución de un carácter. Esta distancia recibe ese nombre en honor al científico ruso Vladimir Levenshtein, quien se ocupara de esta distancia en 1965. Es útil en programas que determinan cuán similares son dos cadenas de caracteres, como es el caso de los correctores de ortografía.
Por ejemplo, la distancia de Levenshtein entre “casa” y “calle” es de 3 porque se necesitan al menos tres ediciones elementales para cambiar uno en el otro.

  1. casa → cala (sustitución de ‘s’ por ‘l’)
  2. cala → calla (inserción de ‘l’ entre ‘l’ y ‘a’)
  3. calla → calle (sustitución de ‘a’ por ‘e’)

Se le considera una generalización de la distancia de Hamming, que se usa para cadenas de la misma longitud y que solo considera como operación la sustitución. Hay otras generalizaciones de la distancia de Levenshtein, como la distancia de Damerau-Levenshtein, que consideran el intercambio de dos caracteres como una operación

El Algoritmo es de tipo bottom-up, común en programación dinámica. Se apoya en el uso de una matriz (n + 1) × (m + 1), donde n y m son las longitudes de los cadenas. Aquí se indica el algoritmo en pseudocódigo para una función LevenshteinDistance que toma dos cadenas, str1 de longitud lenStr1, y str2 de longitud lenStr2, y calcula la distancia Levenshtein entre ellos:

int LevenshteinDistance(char str1[1..lenStr1], char str2[1..lenStr2])
// d is a table with lenStr1+1 rows and lenStr2+1 columns
declare int d[0..lenStr1, 0..lenStr2]
// i and j are used to iterate over str1 and str2
declare int i, j, cost

for i from 0 to lenStr1
d[i, 0] := i
for j from 0 to lenStr2
d[0, j] := j

for i from 1 to lenStr1
for j from 1 to lenStr2
if str1[i] = str2[j] then cost := 0
else cost := 1
d[i, j] := minimum(
d[i-1, j] + 1, // deletion
d[i, j-1] + 1, // insertion
d[i-1, j-1] + cost // substitution
)

return d[lenStr1, lenStr2]
 

El invariante mantenido a través del algorítmo es que pueda 
transformar el segmento inicial str1[1..i] en str2[1..j] 
empleando un mínimo de d[i,j] operaciones. 
Al final, el elemento ubicado en la parte INFERIOR derecha de la matriz 
contiene la respuesta.
 
 


 
 

El Ejercicio

Supóngase que tiene un listado de direcciones postales “sucias” y necesita hacer una limpieza de datos, con un diccionario callejero, para determinar la calidad de sus datos:

Dirección sucia Diccionario
YUNGAY YUNGAY
7 JUNIO SIETE DE JUNIO
R SOTOMAYOR RAFAEL SOTOMAYOR
B ENCALADA BLANCO ENCALADA
GRAL VELASQUEZ GENERAL VELASQUEZ
STA MARIA SANTA MARIA
V MACKENNA VICUÑA MACKENNA
SN ANTONIO SAN ANTONIO
A BELLO ANDRES BELLO

Lo primero que uno podría hacer es separar las cadenas de búsqueda, con un split, e ir comparando palabra por palabra, y devolver la media de los resultados máximos obtenidos. No obstante,  podríamos también usar la distancia de Levenshtein y luego hacer un rankig, desde la menor distancia hasta la más alta. Luego, determinar un punto de corte y poder así determinar cuán buenos son nuestros datos:

Dirección sucia Diccionario DL
YUNGAY YUNGAY 0
SN ANTONIO SAN ANTONIO 1
STA MARIA SANTA MARIA 2
GRAL VELASQUEZ GENERAL VELASQUEZ 3
R SOTOMAYOR RAFAEL SOTOMAYOR 5
V MACKENNA VICUÑA MACKENNA 5
A BELLO ANDRES BELLO 5
B ENCALADA BLANCO ENCALADA 6
7 JUNIO SIETE DE JUNIO 13
 
 
 
Finalmente, sacamos una estadística de las semejanzas en la BBDD y pudimos
establecer el corte para la distancia de levenshtein que determinara si 
teníamos o no que considerar 2 direcciones semejantes. 
Eso si, también hemos puesto en marcha un control de entradas para intentar 
paliar la repetición de direcciones. ;)
 
 
 
 




Un computador cuántico en el ojo del petirrojo

25 07 2011

El petirrojo es un ave migratoria que utiliza como brújula magnética unas proteínas llamadas criptocromos situadas en la retina de sus ojos, según el biólogo Wolfgang Wiltschko (Universidad de Frankfurt). El físico cuántico Vlatko Vedral (Universidad de Oxford) cree que en el criptocromo se entrelazan cuánticamente varios electrones cuyos espines actúan como cubits. Según este especialista en computación cuántica, la Naturaleza ha logrado fabricar el primer computador cuántico, mucho antes que los propios físicos. La Naturaleza va por delante de los investigadores más osados y quizás el primer computador cuántico sea una versión biomimética del criptocromo. Nos lo contó el propio Vedral [1].



Un científico debe ser escéptico por naturaleza y luchar contra el sensacionalismo que prospera por doquier en la web. Yo mismo he caído en varias ocasiones en su trampa. Una noticia alucinante, a veces, se convierte en una alucinación. Me sorprendió la noticia que resumo en el párrafo anterior, publicada en Wired.com [2]. Una notica que abre con la foto de un petirrojo y cierra con una imagen en 3D de una molécula del fullereno C60 con un átomo de nitrógeno en su centro (llamada N@60). Según la noticia “los petirrojos pueden mantener un entrelazamiento cuántico en sus ojos durante 20 microsegundos, tanto como los laboratorios de física más avanzados.”
La fuente de la noticia es un artículo de Vedral publicado en Physical Review Letters (PRL) [3]. Un artículo en PRL es, a priori, una gran garantía de calidad científica. ¡Increíble! Efectos cuánticos en la brújula magnética de las aves migratorias y en particular en el petirrojo (Erithacus rubecula).
Tras 30 años de investigación sobre la brújula magnética de los petirrojos, Wiltschko y sus colegas publicaron en 2002 en Nature que ésta se encuentra en el ojo derecho del petirrojo [4]. Sus estudios demostraron que los petirrojos no pueden orientarse utilizando solo el ojo izquierdo. Sin embargo, este resultado ha sido criticado recientemente [5]. Un estudio independiente no ha encontrado dicha lateralización. Por supuesto, Wiltschko y sus colegan han contestado que el nuevo estudio realiza experimentos diferentes que no demuestran que su hipótesis del ojo derecho sea incorrecta [6]. Más aún, otro estudio reciente apunta a que la brújula magnética de los petirrojos se encuentra en su cerebro, en lugar de sus ojos [7]. Los experimentos con otras aves migratorias han demostrado que son capaces de sentir las variaciones del campo magnético terrestre incluso a ciegas, es decir, a oscuras. Este estudio, también publicado en Nature [7],  presentó indicios fuertes de que la brújula que le permite a los petirrojos orientarse en el campo magnético de la Tierra se encuentra en su cerebro, no en sus ojos. En concreto, en una región de su cerebro asociada a la visión, denominada Clúster N; si se desactiva esta región las aves no pueden utilizar su brújula magnética para orientarse.
Esté o no esté la brújula magnética de los petirrojos en su ojo derecho, en sus dos ojos, o en su cerebro, o en una combinación de ellos, la cuestión que justifica esta entrada es otra. Wiltschko y sus colegas publicaron en 2004, también en Nature, que la brújula magnética de los petirrojos está asociada a unas proteínas llamadas criptocromos que se encuentran en la retina de sus ojos [8]. El criptocromo tiene parte sensible a la luz, como la clorofila, denominada cromóforo. En moscas del vinagre se ha demostrado que esta molécula es sensible a campos magnéticos variables, por lo que Wiltschko y sus colegas no lo dudaron. El problema es que para publicar en Nature además de ofrecer un hipótesis hay que ofrecer una explicación. Había que explicar cómo actúa esta molécula fotorreceptora de la retina de los petirrojos para explicar su gran sensibilidad a las pequeñas variaciones del campo geomagnético.
En su artículo de 2004 [8], Wiltschko y sus colegas afirmaban que los petirrojos son capaces de percibir campos magnéticos variables de alta frecuencia, entre 0’1-10 MHz (megahercios), con una amplitud de solo un 1% del campo magnético terrestre; en números, unos 0’085 µT (microteslas) cuando el campo geomagnético a 66º norte medido por los autores del artículo era de 46 µT. Según los autores del artículo de Nature la única explicación posible para una sensibilidad tan alta es que las moléculas de criptocromo utilizan física cuántica y proponen al efecto Zeeman (el desdoblamiento de los niveles atómicos de los electrones en un átomo bajo el efecto de un campo magnético) como la explicación más razonable.
Aludir a efectos cuánticos en biología tiene un efecto “noticia” que encanta a los editores de revistas como Nature y Science, sobre todo desde que se observaron fenómenos cuánticos a temperatura ambiente (300 K) en la fotosíntesis de las plantas [9]. No voy a discutirlos en detalle, pero os recuerdo que se observó el entrelazamiento cuántico en los cromóforos de ciertas proteínas fotosensibles similares a la clorofila. Ahora bien, hay que recordar una cosa importante. Los ingenieros (sin usar ningún principio cuántico) han fabricado magnetómetros con una resolución de 0,1 nT (nanoteslas) mucho menores que los 85 nT (medidos por Wiltschko et al.).



Pero el artículo de Wiltschko de 2004 [8] no aclaraba los detalles de cómo actúa el efecto Zeeman como brújula magnética, por lo que ha habido varias propuestas teóricas al respecto. La más famosa es el motivo último de esta entrada, la propuesta de Vedral y sus colegas publicada en PRL. En dicho artículo proponen un nuevo modelo simplificado del funcionamiento de la brújula magnética basado en el entrelazamiento cuántico de los espines de los electrones que están en los niveles atómicos desdoblados por el efecto Zeeman (la estructura hiperfina inducida por el campo magnético aplicado). Su propuesta es que estos espines actúan como cubits que se entralazan y realizan una computación cuántica para medir las variaciones del campo geomagnético. El “pequeño” problema de esta propuesta es que se requiere que este entrelazamiento cuántico se mantenga en la proteína durante unos 20 microsegundos. En el artículo de Wired.com se preguntan ¿cómo es posible que un estado cuántico se preserve durante tanto tiempo en una proteína dentro de una célula viva? Ellos contestan que nadie sabe cómo pero que la evolución debe haber descubierto un mecanismo que protege el entrelazamiento cuántico en el criptocromo de los efectos de la decoherencia cuántica. ¡Increíble!
Increíble, pero yo no me lo creo. Como físico no me puedo creer que el entrelazamiento cuántico de los espines de pares de electrones se mantenga en una proteína a temperatura ambiente durante 20 microsegundos. En mi opinión, es un tiempo millones de veces más largo de lo razonable a temperatura ambiente. En laboratorio los físicos cuánticos logran entrelazar cubits durante unos microsegundos pero a muy baja temperatura (cerca del cero absoluto). Además, el entrelazamiento cuántico a temperatura ambiente (300 K) documentado en los cromóforos durante la fotosíntesis tiene una duración de unos 50 femtosegundos y los estudios teóricos indican que en el mejor de los casos puede alcanzar los 2 picosegundos [9]. Quizás hay que recordar que un microsegundo es un millón de picosegundos y mil millones de femtosegundos.
Lo dicho, no me puedo creer que en el ojo de un petirrojo se logre un entrelazamiento cuántico en el cromóforo de un criptocromo decenas de millones de veces más duradero que el que se observa en un cromóforo de la clorofila. No me puedo creer que el computador cuántico en los ojos del petirrojo contenga algún secreto oculto que le permita eludir la decoherencia cuántica y mantener el entrelazamiento cuántico de varios cubits durante un tiempo que ya le gustaría alcanzar a muchos físicos cuánticos. Soy escéptico, lo confieso, pero mientras no vea una prueba científica experimental del papel de la mecánica cuántica en la brújula magnética de las aves, no me puedo creer que estas especulaciones científicas sean la explicación más razonables a este complejo y fascinante fenómeno biológico.
Por cierto, hay otras explicaciones cuánticas para la brújula magnética de las aves, como nos contó MiGUi en “Las aves migratorias se orientan gracias al Efecto Zenón cuántico,” 18 de abril de 2008, quien también se hizo eco de esta noticia sobre Vedral en “Cómo las aves consiguen romper el récord del entrelazamiento cuántico,” 24 de junio de 2009. Permitidme acabar con una frase del propio MiGUi: “Los métodos que utilizan las aves migratorias para orientarse son algo fascinante,” todavía sin explicación, “y se han propuesto teorías muy controvertidas” para explicarlos.

 
Fuente original:  Amazings.es
 
Referencias para quienes quieran profundizar

[1] Vlatko Vedral, “Quantum computers – have birds got there first?,” Science Focus, 2011.
[2] Lisa Grossman, “In the Blink of Bird’s Eye, a Model for Quantum Navigation,” Wired.com, January 27, 2011.
[3] Erik M. Gauger, Elisabeth Rieper, John J. L. Morton, Simon C. Benjamin, & Vlatko Vedral, “Sustained Quantum Coherence and Entanglement in the Avian Compass,” Physical Review Letters 106: 040503, 25 January 2011.
[4] Wolfgang Wiltschko, Joachim Traudt, Onur Güntürkün, Helmut Prior & Roswitha Wiltschko, “Lateralization of magnetic compass orientation in a migratory bird,” Nature 419: 467-470, 3 October 2002.
[5] Christine Maira Hein, Svenja Engels, Dmitry Kishkinev & Henrik Mouritsen, “Robins have a magnetic compass in both eyes,” Nature 471: E1, 31 March 2011.
[6] Wolfgang Wiltschko, Joachim Traudt, Onur Güntürkün, Helmut Prior & Roswitha Wiltschko, “Wiltschko et al. reply,” Nature 471: E1, 31 March 2011.
[7] Manuela Zapka, Dominik Heyers, Christine M. Hein, Svenja Engels, Nils-Lasse Schneider, Jorg Hans, Simon Weiler, David Dreyer, Dmitry Kishkinev, J. Martin Wild, & Henrik Mouritsen, “Visual but not trigeminal mediation of magnetic compass information in a migratory bird,” Nature 461: 1274-1277, 29 October 2009.
[8] Thorsten Ritz, Peter Thalau, John B. Phillips, Roswitha Wiltschko & Wolfgang Wiltschko, “Resonance effects indicate a radical-pair mechanism for avian magnetic compass,” Nature 429: 179-180, 13 May 2004 [open access].
[9] Mohan Sarovar, Akihito Ishizaki, Graham R. Fleming, & K. Birgitta Whaley, “Quantum entanglement in photosynthetic light harvesting complexes,” Nature Physics 6: 462–467, 25 April 2010 [open access].





¿Quieres saber quién la tiene más larga?

6 07 2011

Estupendo artículo publicado por Francis.

Hoy muchos hombres nos hemos mirado los dedos de la mano y hemos pensado en la longitud de nuestro pene. Algunos incluso, de reojo, le han mirado los dedos a alguno de sus amigos.
Casi todos los medios de comunicación se han hecho eco de una curiosa noticia: “La mano habla de tu pene. Cuanto más similares son los dedos índice y anular, más largo es el pene.” Con titulares como los que hemos visto, ¿quién se podía resistir?… muy pocos lo han hecho.

La revista impactada “Asian Journal of Andrology” (publicada por la editorial Nature Publishing Group) ha publicado un artículo de investigación realizado por un equipo de urólogos coreanos liderados por Tae Beom Kim, quien seguro busca un Ig Nobel con este trabajo: In Ho Choi et al., “Second to fourth digit ratio: a predictor of adult penile length,”



¿Ciencia o marketing? En mi opinión, la figura clave del artículo no deja lugar a dudas. Las conclusiones del estudio son puro marketing.
El eje de abscisas representa el cociente entre la longitud del dedo índice y la del dedo anular de la mano derecha (cociente 2D:4D); un valor menor de uno indica que el índice es más corto que el anular. El eje de ordenadas indica la longitud del pene en erección. Si no estuviera dibujada la línea, ¿pensarías que estos 144 datos indican una relación clara entre estos parámetros? Si te gusta la estadística, te informo que el coeficiente de correlación de Pearson para la regresión lineal univariable es de r=-0,216, con un valor P=0,009. Un r<0 implica una correlación negativa (la recta en la figura tiene pendiente negativa). Un valor de r tan pequeño indica que los datos se parecen muy poco una recta porque tienen una dispersión muy grande. El valor P indica la probabilidad de encontrar el valor de r calculado bajo la hipótesis nula (que no haya correlación). Un valor de P<0,05 (un 5%) se considera una correlación estadísticamente significativa. Por tanto, la correlación observada es pobre, aunque una fuerte evidencia de que se da. La siguiente tabla muestra los resultados estadísticos en detalle.



La estadística es una ciencia muy sutil e interpretar sus resultados no siempre es fácil. Una correlación significativa entre dos variables no implica ninguna relación de causa/efecto, ni tampoco implica que se pueda predecir el valor de una de estas variables conociendo la otra. La nube de datos de la figura tiene una dispersión tan grande que la tendencia observada tiene muy poco valor predictivo. La interpretación dada en la prensa al resultado técnico dista mucho de ser fiel a los resultados reales del estudio. Afirmar que “cuanto más similares son los dedos índice y anular, más largo es el pene,” en mi opinión, es ridículo a la vista de los resultados del estudio. No creo que haya que ser un experto en estadística para observar a simple vista que la dispersión de la nube de puntos es tan grande que la asociación proclamada en el artículo (con un valor de r puede ser pura casualidad. Por cierto, la correlación con la longitud del pene flácido es aún menor.



¿Por qué se ha publicado este artículo? La correlación entre los niveles de testosterona y el cociente entre las longitudes de los dedos índices y dedo anular (cociente 2D:4D) ha sido muy discutida en la literatura urológica. La relación más fiable es resultado de un metaanálisis desarrollado en 2010, que descubrió cierta correlación entre el sexo (ser hombre o mujer) y el cociente 2D:4D. Como la testosterona es producida por los testículos, este estudio se suele considerar que indica que los niveles de testorena están también relacionados con el cociente 2D:4D. Sin embargo, hay pocos metaanálisis que estudien esta relación de forma directa. Por ejemplo, un estudio de 2007 encontró una pequeña correlación, pero también poco significativa (r<0.3).
En resumen, quizás soy muy escéptico, pero no te recomiendo que pases mucho tiempo mirando la longitud de los dedos de tus amigos, obtendrás muy poca información sobre el tamaño de su miembro. Hay mejores maneras de saber quién la tiene más larga.

Fuente Original: Amazing.es





2-Sphere, un diseño de IA con aprendizaje por cálculo predictivo

27 01 2011

p { margin-bottom: 0.21cm; }

Hola!!! He diseñado un proceso de cálculo predictivo denominado (módulo “2-Sphere”) y que representa un gran avance para el incremento de calidad y previsión sobre los datos de procesos/evaluaciones de grandes cantidades de datos.
Es ágil, veloz, consume pocos recursos, etc… y todo esto no es porque haya sido ideado por mí, jejeje, … es porque simplemente es así.
; )
Hay pruebas tangibles de su funcionamiento y se ha implantado/integrado por ejemplo en mi trabajo actual (Basilea II / implantación global del riesgo, evaluación de empresas, créditos, capital, etc… ) y ha resultado un gran éxito. Alertas sobre los datos, muy sensibles y a una gran velocidad de respuesta!
Paso a detallaros los conceptos teóricos de este avance estadístico, basado en una labor de unificar acciones de inteligencia artificial y sistemas expertos.

El foco de estudio será cualquier variable numérica que pertenezca a un origen de generación evolutivo, supuestamente con origen de alguna función temporal.


1.-  BASE TEÓRICA DEL ANALISTA EXPERTO 2-SPHERE. 

Justo al finalizar cualquier proceso de cálculo sería interesante poder validar la cuantía de cambio producida contra la función teórica ajustada con toda la historia “memorizada” de la variable estudiada.

Con este punto implementado en cualquier sistema informático/estadístico/de control, se podrán añadir las validaciones de cambios bruscos, o de masa que sean necesarias y/o deseadas.

El núcleo de cálculo para predecir la evolución de una variable dada se ha denominado núcleo 2-Sphere, por su funcionalidad de un doble entorno/disco a la hora de aplicarse.
En base a si se cumplen o no las reglas/predicciones anclaremos las medidas de alerta necesarias. En la implantación que he realizado se ha generado alertas vía mail y estadísticas según la gravedad del asunto.


Las predicciones se resumen en el uso de dos “esferas/anillos” concéntricas (2-Sphere), donde se englobarían los valores más o menos aceptados. En caso de no caer el valor en la zona esperada saltarían las alertas deseadas.
Zonas o casos:
  1. Un anillo interior o de nivel 1 (local) representa el margen más correcto de datos esperados.
  1. Un anillo secundario o de nivel 2(global) representa el margen aceptable de datos esperados.
  1. Fuera de los dos anillos se considerarán datos no esperados.
Por lo tanto, consideraremos tres niveles de alertas:
  • Un nivel de alerta bajo o nulo: caerán la mayoría de casos con menos criticidad (por ejemplo, modelos especificados con mailing de estadisticas descriptivas, etc…)
  • Un nivel de alerta medio (por ejemplo, sobrepasar anillo-1 … )
  • Un nivel de alerta alto: caerán menos casos pero los de más criticidad (por ejemplo, sobrepasar anillo-2 … )
Explicación gráfica de su uso.
El núcleo predictivo calcula un entorno local, en cuyo caso de no cumplirse podríamos alertar con un nivel medio.

El mismo proceso nos devuelve también un entorno global de aceptación, en cuyo caso de no cumplirse podríamos alertar con un nivel alto de alerta.

Se puede pensar también en incluir un nivel-bajo de alerta, donde podrían saltar estadísticas varias, media, moda, cuartiles, etc… dependiendo del modelo, tipologías varias, etc… para estos casos, habría que revisar la incorporación y viabilidad de algún entorno de validaciones poblacionales.
Adjunto un ejemplo real de la evolución de las esferas para una variable en el tiempo:

Como se puede observar,  con el tiempo, la situación tiende a estabilizarse, y se asumen ciertos cambios en la tendencia de la curva de la función que dirige la variable de estudio.

Tambien podemos observar como, en base a estos cambios (aceptados) las esferas van aumentando de grosor, ampliando el rango de valores adecuados.

En resumidas cuentas el núcleo predictivo se podría especificar como una base de datos de conocimiento y un módulo de cálculo predictivo que hace uso de esa base de datos de conocimiento y de los valores nuevos para finalmente generar resultados/alertas y actualizar la base de datos de conocimiento.
Es como un “autómata” que entrenamos para que “aprenda” y después reconozca extraños comportamientos en variables y así nos diga si pasa o no algo raro en alguna variable de algún cálculo dado. 


También se puede incluir la posibilidad de manipular los datos de la BBDD de forma supervisada, mediante transaccionales por ejemplo. Mínimo serán necesarios unos mecanismos de rollback de 1 a N estados atrás (queda concretar la profundidad de dicha restauración, solo limitado por los recursos).

Algo así como unos procesos de supervisión para los 3 casos de alerta GRAVE que se nos puedan dar:


Caso 1) – el modelo matemático en el que se basa una variable ha cambiado radicalmente. ACCION: “reseteo” de la memoria para esa variable y los casos que estén impactados.

Caso 2) – Solo algunos casos responden a alguna medida de cambio GRAVE. No tenemos más información para poder conocer si es ERROR o no de toma de datos. ACCION: se sigue adelante.

Caso 3) – Hay casos de ERROR de toma de datos o de proceso. ACCIÓN: se anula el último aprendizaje de los casos afectados.


El diagrama E-R de la BBDD de conocimiento para 2-Sphere es el siguiente:

De este modo, podríamos considerar la entidad(tabla) de conocimiento como un cubo 3D (OLAP) donde el alto y ancho se definen como una malla de variables por persona y el largo serían las versiones de referencia, y la más cercana siempre se considerará como la última válida.

 

Así, de forma supervisada podremos volver a una situación previa en la base de datos de conocimiento (por ejemplo, en un supuesto mal uso de algun ratio o variable, etc…) eliminando versiones “sucias” por errores de datos, etc…(tal y como hemos comentado anteriormente).
Para habilitar esta posibilidad será necesario un transaccional (o servicio alternativo) que facilite trabajar con la BBDD de conocimiento directamente.
Añadido a esta necesidad está la posibilidad de incluir consultas y mantenimiento de dicha tabla via este mismo transaccional/pantalla.
2.-  BASE PRÁCTICA DEL ANALISTA EXPERTO 2-SPHERE. 

Sea x la clave de trabajo identificada con los siguientes valores:
–          modelo, nos determina el cubo OLAP de la BBDD de conocimiento
–          fecha de referencia, nos determina la malla dentro de un cubo dado
–          persona, nos determina la fila dentro de una malla
–          variable/parámetro, nos determina la columna dentro de una malla
Y sea f(x) la función que sea aplicada a los valores de una variable x.  
Con este sistema y el software adecuado, en base a un nuevo valor f(xi) de entrada para una clave de trabajo determinada, obtendremos como salida si pertenece a la esfera interior (1), a la esfera exterior (2) o a ninguna (0).

Por ejemplo,
Si procesamos esta serie:

Y tenemos a evaluar el nuevo valor i=7, con F(7) = 8
¿Como de bueno es este valor para nuestro sistema?
Para este tipo de cuestiones nos será de gran utilidad este sistema de predicción.
Recordemos que, para un modelo particular, solo necesitamos la última malla 2D del cubo, lo más reciente.
Esto nos deja un campo de trabajo más reducido, con lo que los recursos y tiempos empleados en la predicción serán menores.
Las 2 esferas de predicción a calcular se definen con 4 valores-marco, las cotas inferiores y superiores marcadas en rojo en el siguiente dibujo.

 
Se denominan MIN_GRAVE, MAX_GRAVE, MIN_leve y MAX_leve.


 

Cada una de estas cotas se calculan únicamente en base a 5 elementos, el máximo y mínimo global de la muestra, el valor predicho por la tangente “impulsada”, y los valores máximo y mínimo locales calculados en base a la desviación estándar con respecto a la media aritmética de la muestra.

Estos 5 valores conforman el núcleo predictivo y para poder calcularlos son necesarios estos cálculos previos para cada previsión.

Estos 2 factores son de índole descriptiva, es decir, se basan en parámetros de estadística descriptiva como son la media y la desviación típica/estándar de la muestra. Como nuestro objetivo es que la predicción sea rápida y eficiente, será necesario trabajar con el menor número de recursos posible, solo una malla, de modo que para calcular la media de los valores y el desvío estándar, no tenemos disponible toda la muestra, iremos reevaluando dichos cálculos en cada iteración.

Usaremos la media de valores o esperanza.
p { margin-bottom: 0.21cm; }

p { margin-bottom: 0.21cm; }
me = 1/n * ∑ ( x) = E(x)    (1)

También usaremos la desviación estándar (б), para toda una muestra se define así:

(2)

O lo que es lo mismo, la raiz cuadrada de la varianza muestral (S2).

(3)

Esta expresión no podríamos reevaluarla de forma iterativa sin tener en mano toda la muestra previamente. Para salvar este obstáculo, suplantamos la sumatoria de desviaciones por una diferencia de sumatorias, de este modo:
Partiendo de la definición (3)
S2 = 1/n * ∑ ( x – me )2
S2 = 1/n * ∑ ( x2 + me 2 – 2 x me )
Aplicamos la sumatoria y la división a los elementos y nos queda,
S2 = 1/n * ( ( x2) + n*me 2 – 2 * ( x )* me )
S2 = ( 1/n *∑ ( x2) ) + n*me 2 – 2 * ( 1/n *∑ ( x) ) * me
Teniendo en cuenta la definición de la esperanza (1), simplificamos la notación
S2 = E( x2) + me 2 – 2 * E( x )*me
S2 = E( x2) + me 2 – 2 * me * me
S2 = E( x2) + me 2– 2*me2
Finalmente nos queda la expresión de la varianza así,
S2 = E( x2) – me 2
Y finalmente tendremos la desviación típica, aplicando (2) p { margin-bottom: 0.21cm; }

б = S2

Como se puede ver, con sólo tener la suma total de cuadrados, la suma total de valores y el conteo de casos tratados podemos calcular la media y desviación de la muestra.

Estos 2 factores se definen como el rango de valores aceptados de la muestra. Esto es, el marco o entorno de valores recibidos hasta el momento.

Solo nos será necesario tener el máximo (M) y mínimo (m) de los valores recibidos.
M = MAX (yi)
m = min (yi)

El último componente del núcleo predictivo es el valor de predicción, basado en una función de ajuste lineal usando tangentes y un factor de impulso histórico (β), el cual se decrementa en cada paso para de este modo simbolizar el efecto global de todos los valores de la muestra como una combinación de los mismos, donde los valores más antigüos “impulsarán” menos la estimación que los valores más actuales.

La ecuación generalmente usada para la línea recta es (1)
y = m*x + b
donde el valor Y dependiente es función de los valores X independientes. Los valores m son coeficientes (pendiente)que corresponden a cada valor X, y b es un valor constante (intercepción y).
Pendiente (m):
la pendiente de una línea, frecuentemente indicada por m, se calcula con dos puntos de la línea,
(x1, y1) y (x2, y2).
quedando definida así m = (y2y1)/( x2x1) = Δy / Δx
Intercepción Y (b):
La intercepción Y de una línea, frecuentemente indicada por b, es el valor de Y en el punto en que la línea cruza el eje X. Para nuestro problema, podemos resumir el punto de anclaje como el último recibido en la muestra,
b = y1 (2)
Así que si Interpretamos (1), simplificando con las definiciones (2)
y = m*x + b
y = ( Δy / Δx ) * Δx + y1 (3)
y = Δy + y1
En nuestro estimador, la pendiente m la vamos a “impulsar”, como decíamos, con un factor generalizado para reproducir el efecto global de todos los elementos de la muestra.
El último impulso es precisamente la pendiente m y la denotamos como Δy
Y al añadido histórico de los “impulsos” previos como β
desde (3) finalmente nos quedaría entonces algo así
y2 = ( Δy + β ) * Δx + y1
El añadido de “impulso” (β) representa un desvío en la coordenada y provocado por el efecto global acumulado de todos los cambios de pendiente anteriores.
β 1 = 0
β 2 = ( (Δy 2Δy 1 ) * 1 + β 1 * 1 ) / 2 = ( (Δy 2Δy 1 ) * 1 + 0 ) / 2
β 3 = ( (Δy 3 Δy 2 ) * 2 + β 2 * 2 ) / 3 = ( (Δy 2Δy 1 ) * 2 + (Δy 2Δy 1 ) * 1 + 0) / 3
.
β n = ∑ ((Δy i Δy i-1 ) * (i-1)) / ∑ (i)
Finalmente, el valor estimado con nuestro núcleo será el ajustado por esta curva:
P = (Δy+β)*Δx + y1


La
esfera interior (nivel-1) podemos calcularla con la siguiente formulación:

[ me – б , me + б ]
Indicar que si se permiten valores muy irregulares en la muestra, esta media me y desviación б no serán representativas y por lo tanto el anillo-1 no será eficiente para la estimación.

La esfera exterior (nivel-2) quedará definida con esta formulación:

[ minimo ( me – б ; me + б ; M ; m ; P ) , máximo ( me – б ; me + б ; M ; m ; P ) ]
Indicar, al igual que con la media, que si se permiten valores muy irregulares en la muestra, los valores de M y m no serán representativos y por lo tanto el anillo-2 no será útil para la estimación.
También se verá afectada la estimación P si hay valores irregulares en la muestra, ya que “impulsarán” de forma indebida su valoración.
Con el sistema implantado y funcionando, la respuesta a la pregunta que planteábamos al principio del diseño,
Si procesamos esta serie:

el nuevo valor i=7, con F(7) = 8 ¿Como de bueno es este valor para nuestro sistema? “
Con el sistema alimentado con dicha serie, tendríamos este modelo predictivo,

MIN GRAVE
MAX GRAVE
MIN leve MAX leve
0,000000
6,000000
0,792175
4,207825


Por lo tanto, el valor de 8 no entraría ni en la esfera-1 ni en la 2, y debería saltar alguna alerta de gravedad alta.

Resumiendo, el diseño del sistema comprende estos dos elementos:
  1. Núcleo de predicción.
  1. BBDD. de conocimiento.
Los requerimientos para cada elemento se enumaran así:
Cualquier programa de estimación/validación necesitará informar al módulo de predicción (módulo ambivalente por defecto):
– la clave de acceso a la BBDD. de conocimiento
–          modelo, nos determina el cubo OLAP de la BBDD de conocimiento
–          fecha de referencia, nos determina la malla dentro de un cubo dado
–          persona, nos determina la fila dentro de una malla
–          variable/parámetro, nos determina la columna dentro de una malla
     –           el valor a evaluar
Se generará a la salida el mismo registro de entrada pero con la esfera de pertenencia (1,2,0), y anexo un nuevo registro para almacenar en la BBDD de conocimiento. Por defecto, se establece que cada valor chequeado ha entrado o se ha usado en una evaluación de rating y por ello se considerará válido para la adaptación. Para eliminar posibles casos irregulares de cambio se deberá habilitar un transaccional o mecanismo de rollback de determinadas celdas deseadas de la malla.
Internamente, el núcleo de predicción seguirá estos pasos:
–          Accederá a la BBDD de conocimiento por clave (modelo, fecha, persona, variable)
–          Recuperará los valores de los marcos/esferas (max_local, min_local, MAX, MIN)
–          Teniendo como referencia el nuevo valor a validar (x2, y2) y la situación de la malla anterior, realizará la asignación de esfera.
–          Actualizará valores de la celda en la malla de conocimiento en base al nuevo valor ( x2, y2, suma_total, num_elementos, suma_total_cuadrados, beta_β, MAX, MIN )
–          Devolverá la asignación y el nuevo registro con las nuevos estadísticos de esa clave.
La BBDD de conocimiento podemos comenzar a trabajar con ficheros generacionales (GDG) que mantengan la estructura necesaria para posteriormente, cuando tengamos la tabla y relaciones necesarias creadas, implantar las cargas y descargas de las mismas para tener finalmente todo enlazado.
Hasta que no se tenga la BBDD de conocimiento en DB2 no podremos montar aplicaciones transaccionales de consulta/mantenimiento (inserts, updates, hacer backups o rollbacks de items, etc… )
Sean ficheros o tablas, la estructura necesaria es la siguiente:
–          modelo, nos determina el cubo en la BBDD de conocimiento
–          fecha de referencia, nos determina la malla dentro de un cubo dado
–          persona, nos determina la fila dentro de una malla
–          variable/parámetro,  nos determina la columna dentro de una malla
–          x2 , ultima fecha recibida
–          y2 , ultimo valor recibido
–          suma_total, suma de todos los valores recibidos
–          num_elementos,  numero de items recibidos
–          suma_total_cuadrados , suma de todos los valores recibidos al cuadrado
–          beta_β, impulso hasta el momento
Para resumir, finalmente este sistema nos permite tener una visión muy rápida y sensible de como ha ido el proceso. 

IMPORTANTE: no olvidar que aun siendo un sistema inteligente con auto-aprendizaje, etc… merece la pena una supervisión periódica para indicarle si está bien o no su evaluación, es algo así como darle o no un caramelo por lo bien que lo ha hecho, reconducirlo a la forma correcta de evaluación. Si no, podemos encontrarnos con que el sistema se ha desfasado perdiendo su eficiacia.



Alé.





Weka – aprendizaje automático y Datamining

6 02 2010

Otro software con el que me he topado y usado a menudo para labores de datamining.

Weka (Waikato Environment for Knowledge Analysis – Entorno para el Análisis del Conocimiento) es un maravilloso software para aprendizaje automático y minería de datos escrito en java, software libre, etc…

Es bastante completo en cuanto a algoritmos para tratamiento de informacion y analisis del conocimiento se refiere. Abarca desde tecnicas ETL, preprocesamiento de datos, clustering, asociaciones, selecciones, visualizacion de resultados, testeos y entrenamientos, diagramas de flujo de conocimiento, etc…

Muy recomendable.