Valutazione del nome di dominio


25

Il trading di nomi di dominio è un grande business. Uno degli strumenti più utili per il trading di nomi di dominio è uno strumento di valutazione automatica, in modo da poter facilmente stimare quanto vale un determinato dominio. Sfortunatamente, molti servizi di valutazione automatica richiedono l'utilizzo di un abbonamento / abbonamento. In questa sfida, dovrai scrivere un semplice strumento di valutazione in grado di stimare approssimativamente i valori dei domini .com.

Input Output

Come input, il tuo programma dovrebbe prendere un elenco di nomi di dominio, uno per riga. Ogni nome di dominio corrisponderà al regex ^[a-z0-9][a-z0-9-]*[a-z0-9]$, il che significa che è composto da lettere minuscole, cifre e trattini. Ogni dominio ha almeno due caratteri e non inizia né termina con un trattino. Il .comè omesso da ogni dominio, dal momento che è implicita.

Come forma alternativa di input, puoi scegliere di accettare un nome di dominio come un array di numeri interi, anziché una stringa di caratteri, purché tu specifichi la conversione da carattere a intero desiderata.

Il tuo programma dovrebbe generare un elenco di numeri interi, uno per riga, che fornisce i prezzi stimati dei domini corrispondenti.

Internet e file aggiuntivi

Il tuo programma potrebbe avere accesso a file aggiuntivi, purché tu fornisca questi file come parte della tua risposta. Il tuo programma è anche autorizzato ad accedere a un file di dizionario (un elenco di parole valide, che non devi fornire).

(Modifica) Ho deciso di espandere questa sfida per consentire al programma di accedere a Internet. Ci sono un paio di restrizioni, dato che il tuo programma non può cercare i prezzi (o la cronologia dei prezzi) di alcun dominio e che utilizza solo servizi preesistenti (quest'ultimo per coprire alcune lacune).

L'unico limite alla dimensione totale è il limite della dimensione della risposta imposto da SE.

Esempio di input

Questi sono alcuni domini venduti di recente. Disclaimer: Sebbene nessuno di questi siti sembri dannoso, non so chi li controlli e quindi sconsiglio di visitarli.

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

Esempio di output

Questi numeri sono reali.

635
31
2000
1
2001
5
160
1

punteggio

Il punteggio si baserà sulla "differenza dei logaritmi". Ad esempio, se un dominio è stato venduto a $ 300 e il tuo programma lo ha valutato a $ 500, il tuo punteggio per quel dominio è abs (ln (500) -ln (300)) = 0,5108. Nessun dominio avrà un prezzo inferiore a $ 1. Il tuo punteggio complessivo è il punteggio medio per l'insieme di domini, con punteggi più bassi migliori.

Per avere un'idea di quali punteggi dovresti aspettarti, semplicemente indovinando una costante 36per i dati di allenamento di seguito si ottiene un punteggio di circa 1.6883. Un algoritmo di successo ha un punteggio inferiore a questo.

Ho scelto di usare i logaritmi perché i valori si estendono su diversi ordini di grandezza e i dati saranno riempiti con valori anomali. L'uso della differenza assoluta al posto della differenza quadrata contribuirà a ridurre l'effetto dei valori anomali nel punteggio. (Nota anche che sto usando il logaritmo naturale, non la base 2 o la base 10.)

Fonte di dati

Ho sfogliato un elenco di oltre 1.400 domini .com venduti di recente da Flippa , un sito Web di aste di domini. Questi dati costituiranno il set di dati di allenamento. Al termine del periodo di invio, aspetterò un mese in più per creare un set di dati di test, con il quale verranno assegnati i punteggi. Potrei anche scegliere di raccogliere dati da altre fonti per aumentare le dimensioni dei set di addestramento / test.

I dati di allenamento sono disponibili al seguente punto. (Dichiarazione di non responsabilità: anche se ho usato alcuni semplici filtri per rimuovere alcuni domini palesemente NSFW, molti potrebbero essere ancora contenuti in questo elenco. Inoltre, sconsiglio di visitare qualsiasi dominio che non riconosci .) I numeri sul lato destro sono i veri prezzi. https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

Ecco un grafico della distribuzione dei prezzi del set di dati di addestramento. L'asse x è il registro naturale del prezzo, con l'asse y conteggiato. Ogni barra ha una larghezza di 0,5. I picchi a sinistra corrispondono a $ 1 e $ 6 poiché il sito Web di origine richiede che le offerte aumentino di almeno $ 5. I dati del test possono avere una distribuzione leggermente diversa.

inserisci qui la descrizione dell'immagine

Ecco un link allo stesso grafico con una larghezza della barra di 0,2. In quel grafico puoi vedere picchi a $ 11 e $ 16.


Solo un avvertimento, usando i digraph più comuni per segnare un dominio funziona in modo abissale! R² ≅ 0

2
Qualcuno ovviamente deve fare una risposta alla rete neurale per questo.
user48538

1
Il programma può collegarsi a Internet (ad esempio, interrogare google)? Ovviamente non allo scopo di cercare i prezzi ovviamente, ma per raccogliere dati da utilizzare come caratteristica.
Joe,

@Joe Mi dispiace non ho avuto la possibilità di rispondere, ma ho deciso di consentire l'accesso a Internet.
PhiNotPi l'

Risposte:


3

Perl, 1.38605

Ho pensato che avrei dovuto andare avanti e pubblicare la mia presentazione, nella speranza che stimolasse la concorrenza. Il suo punteggio 1.38605significa che è in genere spento di un fattore di 3.999(che era il mio punto di arresto). Non ho usato nessuna libreria di apprendimento automatico, solo perl. Richiede l'accesso a un dizionario; Ho usato quello da qui .

Sentiti libero di usare alcuni dei numeri / statistiche del mio programma nel tuo.

use strict;

my %dict;
my $dictname = "dict.txt";
open(my $dfh, '<', $dictname);
while (my $row = <$dfh>) {
  chomp $row;
  $dict{lc $row} = 1;
}

my $domain = <>;
chomp($domain);

my $guess = 1;

if($domain =~ /^[a-z]*$/){
    my @bylength = (200000,20001,401,45,45,41,26,26,26,26,26,24);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 18;
  }
} elsif ($domain =~ /^[0-9]*$/){
  my @bylength = (300000,30001,6000,605,50);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 7;
  }
} elsif ($domain =~ /^[a-z0-9]*$/){
  my @bylength = (52300,523,28);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 23;
  }
} else {
  my @bylength = (50000,500,42,32,32,31);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 12;
  }
}

my $wordfact = 1;

my $leftword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, 0, $i;
  if(exists($dict{$word})){
    $leftword = $i;
  }
}

$wordfact *= ($leftword/length($domain))**2 * 0.8 + ($leftword/length($domain)) * -0.1 + 0.9;

if($leftword/length($domain) >= 0.8){
  $wordfact *= 2.4;
}

my $rightword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, length($domain)-$i, $i;
  if(exists($dict{$word})){
    $rightword = $i;
  }
}

$wordfact *= ($rightword/length($domain))**2 * 0.9 + ($rightword/length($domain)) * -0.2 + 1;         

$guess *= $wordfact;

my $charfact = 1;
my %charfacts = (
  i => 1.12, #500
  l => 0.84,
  s => 1.09,
  a => 0.94,
  r => 1.03,
  o => 0.97, 
  c => 1.22, #400
  d => 0.88,
  u => 1.07,
  t => 0.95,
  e => 1.08,
  m => 0.91, #300
  p => 1.08,
  y => 0.92,
  g => 0.97,
  ne => 0.56, #100
  n => 1.13,
  z => 0.67,
  re => 1.30,
  es => 0.75,
);
while(my ($key,$value) = each %charfacts){
  if($domain =~ /$key/){
    $charfact *= $value;
  }
}
$guess *= $charfact;

$guess = int($guess + 0.5);
if($guess <= 0){
  $guess = 1;
}

print $guess;

Ecco un grafico creato dal mio programma di punteggio, che mostra un diagramma a dispersione di valutazione sul prezzo effettivo e un istogramma degli errori. Nel diagramma a dispersione .:oO@significano rispettivamente 10, 20, 30, 40, 50domini in quel punto. Nell'istogramma ognuno Orappresenta 16 domini.

La scala è impostata su 1 character width = e^(1/3).

inserisci qui la descrizione dell'immagine

Ci sono tre passaggi principali per questo programma. I risultati di ogni passaggio vengono moltiplicati insieme.

  1. Classificazione per classe di caratteri e lunghezza. Determina se il dominio è composto da tutte le lettere, tutti i numeri, lettere e numeri o se contiene un trattino. Fornisce quindi un valore numerico determinato dalla lunghezza del dominio. Ho scoperto che c'è uno strano calo di valore intorno alla lunghezza 5. Sospetto che ciò sia dovuto al campionamento: i domini più brevi sono preziosi a causa della loro lunghezza (anche se le lettere sono prive di senso), mentre i domini più lunghi tendono ad essere parole / frasi. Ordino di evitare l'eccessivo adattamento, ho messo una restrizione in quanto i domini non possono essere penalizzati per essere più brevi (quindi la lunghezza 5 è almeno pari alla lunghezza 6).

  2. Valutazione del contenuto delle parole. Uso il dizionario per determinare la lunghezza delle parole della mano sinistra e della mano destra in un nome di dominio. Ad esempio myawesomesite -> my & site -> 2 & 4,. Quindi, provo a fare un po 'di adattamento in base a quale proporzione del nome di dominio è composta da quelle parole. Valori bassi indicano in genere che il dominio non contiene una parola, contiene una parola pluralizzata / modificata non presente nel dizionario, contiene una parola circondata da altri caratteri (le parole interne non vengono rilevate, anche se l'ho provato senza alcun miglioramento) o contiene un frase di più parole. Valori elevati indicano che si tratta di una sola parola o di una probabile frase di due parole.

  3. Valutazione del contenuto del personaggio. Ho cercato sottostringhe contenute in molti domini e che sembravano influenzare i valori del dominio. Credo che ciò sia causato da alcuni tipi di parole più popolari / più attraenti, per vari motivi. Ad esempio, la lettera è iapparsa in circa la metà dei domini (741 di essi) e aumenta in media il valore del dominio di circa il 12%. Non è troppo adatto; c'è qualcosa di reale lì, che non capisco fino in fondo. La lettera lappare in 514 domini e ha un fattore di 0,84. Alcune delle lettere / digraph meno comuni, come quelle neche sono apparse 125 volte e hanno un fattore veramente basso di 0,56, potrebbero essere troppo adatte.

Per migliorare questo programma, probabilmente dovrei usare l'apprendimento automatico di qualche tipo. Inoltre, potrei cercare relazioni tra lunghezza, contenuto delle parole e contenuto del personaggio per trovare modi migliori di combinare questi risultati separati nel valore complessivo della valutazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.