Domain Name Appraisal

25

Der Handel mit Domain-Namen ist ein großes Geschäft. Eines der nützlichsten Tools für den Handel mit Domain-Namen ist ein automatisches Bewertungs-Tool, mit dem Sie leicht abschätzen können, wie viel eine Domain wert ist. Leider erfordern viele automatische Bewertungsdienste eine Mitgliedschaft / ein Abonnement, um verwendet zu werden. In dieser Herausforderung schreiben Sie ein einfaches Bewertungs-Tool, mit dem Sie die Werte von .com-Domains grob schätzen können.

Input-Output

Als Eingabe sollte Ihr Programm eine Liste von Domain-Namen verwenden, einen pro Zeile. Jeder Domainname entspricht dem regulären Ausdruck ^[a-z0-9][a-z0-9-]*[a-z0-9]$, dh, er besteht aus Kleinbuchstaben, Ziffern und Bindestrichen. Jede Domain ist mindestens zwei Zeichen lang und beginnt und endet nicht mit einem Bindestrich. Das .comwird in jeder Domain weggelassen, da es impliziert ist.

Als alternative Form der Eingabe können Sie einen Domänennamen als Array von Ganzzahlen anstelle einer Zeichenfolge akzeptieren, sofern Sie die gewünschte Umwandlung von Zeichen in Ganzzahlen angeben.

Ihr Programm sollte eine Liste von ganzen Zahlen ausgeben, eine pro Zeile, die die geschätzten Preise der entsprechenden Domänen angibt.

Internet und zusätzliche Dateien

Ihr Programm hat möglicherweise Zugriff auf zusätzliche Dateien, sofern Sie diese Dateien als Teil Ihrer Antwort bereitstellen. Ihr Programm kann auch auf eine Wörterbuchdatei zugreifen (eine Liste gültiger Wörter, die Sie nicht angeben müssen).

(Bearbeiten) Ich habe beschlossen, diese Herausforderung zu erweitern, damit Ihr Programm auf das Internet zugreifen kann. Es gibt ein paar Einschränkungen: Ihr Programm kann die Preise (oder Preishistorien) von Domains nicht nachschlagen und verwendet nur bereits vorhandene Services (letztere, um einige Lücken zu schließen).

Die einzige Beschränkung der Gesamtgröße ist die von SE festgelegte Beschränkung der Antwortgröße.

Beispiel Eingabe

Dies sind einige kürzlich verkaufte Domains. Haftungsausschluss: Obwohl keine dieser Websites böswillig erscheint, weiß ich nicht, wer sie kontrolliert, und rate daher von einem Besuch ab.

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

Beispielausgabe

Diese Zahlen sind real.

635
31
2000
1
2001
5
160
1

Wertung

Die Bewertung basiert auf der "Differenz der Logarithmen". Wenn beispielsweise eine Domain für 300 US-Dollar verkauft wurde und von Ihrem Programm auf 500 US-Dollar geschätzt wurde, beträgt Ihr Score für diese Domain abs (ln (500) -ln (300)) = 0,5108. Keine Domain hat einen Preis von weniger als 1 US-Dollar. Ihre Gesamtpunktzahl ist Ihre Durchschnittspunktzahl für die Domains, wobei niedrigere Punktzahlen besser sind.

Um eine Vorstellung davon zu bekommen, welche Punktzahl Sie erwarten sollten, erhalten Sie 36eine Punktzahl von ungefähr, wenn Sie eine Konstante für die folgenden Trainingsdaten erraten 1.6883. Ein erfolgreicher Algorithmus hat eine geringere Punktzahl.

Ich habe mich für die Verwendung von Logarithmen entschieden, da die Werte mehrere Größenordnungen umfassen und die Daten mit Ausreißern gefüllt werden. Die Verwendung der absoluten Differenz anstelle der quadrierten Differenz verringert den Effekt von Ausreißern bei der Bewertung. (Beachten Sie auch, dass ich den natürlichen Logarithmus verwende, nicht Basis 2 oder Basis 10.)

Datenquelle

Ich habe eine Liste von über 1.400 kürzlich verkauften .com-Domains von Flippa , einer Domain-Auktions-Website, überflogen . Diese Daten bilden den Trainingsdatensatz. Nach Ablauf der Einreichungsfrist warte ich einen weiteren Monat, um einen Testdatensatz zu erstellen, mit dem die Einreichungen bewertet werden. Ich könnte auch Daten aus anderen Quellen sammeln, um die Größe der Trainings- / Testsätze zu erhöhen.

Die Trainingsdaten sind im Folgenden aufgeführt. (Haftungsausschluss: Obwohl ich einige offensichtliche NSFW-Domains mit einfachen Filtern entfernt habe, sind möglicherweise noch einige in dieser Liste enthalten. Außerdem rate ich davon ab, Domains zu besuchen, die Sie nicht kennen .) Die Zahlen auf der rechten Seite sind die wahren Preise. https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

Hier ist ein Diagramm der Preisverteilung des Trainingsdatensatzes. Die x-Achse ist das natürliche Protokoll des Preises, wobei die y-Achse gezählt wird. Jeder Balken hat eine Breite von 0,5. Die Spikes auf der linken Seite entsprechen 1 US-Dollar und 6 US-Dollar, da für die Quell-Website Gebote erforderlich sind, um mindestens 5 US-Dollar zu erhöhen. Die Testdaten können leicht unterschiedlich verteilt sein.

Bildbeschreibung hier eingeben

Hier ist ein Link zum selben Diagramm mit einer Balkenbreite von 0,2. In diesem Diagramm sehen Sie Spitzen bei 11 und 16 US-Dollar.

PhiNotPi
quelle
Nur einen Kopf hoch, mit den gebräuchlichsten Digraphen, um eine Domain zu bewerten, funktioniert es miserabel! R² ≅ 0
2
Jemand muss offensichtlich eine neuronale Netzwerkantwort dafür machen.
user48538
1
Kann das Programm eine Verbindung zum Internet herstellen (z. B. Google abfragen)? Ausdrücklich, natürlich nicht zum Nachschlagen von Preisen, sondern zum Sammeln von Daten, die als Merkmal verwendet werden sollen.
Joe
@ Joe Entschuldigung, ich hatte keine Möglichkeit zu antworten, aber ich habe beschlossen, den Internetzugang zuzulassen.
PhiNotPi

Antworten:

3

Perl, 1,38605

Ich dachte, ich sollte weitermachen und meinen eigenen Beitrag veröffentlichen, in der Hoffnung, dass dies den Wettbewerb anspornt. Seine Kerbe von1.38605 bedeutet, dass es in der Regel um einen Faktor von 3.999(das war mein Haltepunkt) abweicht. Ich habe keine maschinellen Lernbibliotheken verwendet, sondern nur Perl. Es erfordert Zugriff auf ein Wörterbuch. Ich habe den von hier benutzt .

Bitte zögern Sie nicht, einige der Zahlen / Statistiken aus meinem Programm in Ihrem eigenen zu verwenden.

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;

Hier ist ein Diagramm meines Bewertungsprogramms, das eine Streudiagramm der Bewertung über den tatsächlichen Preis und ein Histogramm der Fehler zeigt. In der Streudiagramm.:oO@ bedeutet dies jeweils 10, 20, 30, 40, 50Domänen an diesem Punkt. Im Histogramm stehen jeweils O16 Domänen.

Die Skala ist auf eingestellt 1 character width = e^(1/3).

Bildbeschreibung hier eingeben

Dieses Programm besteht aus drei Hauptschritten. Die Ergebnisse aus jedem Schritt werden miteinander multipliziert.

  1. Kategorisierung nach Charakterklasse und Länge. Es wird bestimmt, ob die Domain aus Buchstaben, Zahlen, Buchstaben und Zahlen besteht oder ob sie einen Bindestrich enthält. Es gibt dann einen numerischen Wert an, der durch die Länge der Domäne bestimmt wird. Ich habe festgestellt, dass der Wert um Länge 5 merkwürdig abfällt. Ich vermute, dass dies auf Stichproben zurückzuführen ist: Kürzere Domänen sind aufgrund ihrer Länge wertvoll (auch wenn die Buchstaben Unsinn sind), während die meisten längeren Domänen eher Wörter / Phrasen sind. Um eine Überanpassung zu verhindern, habe ich eine Einschränkung dahingehend eingeführt, dass Domains nicht dafür bestraft werden können, dass sie kürzer sind (also ist Länge 5 mindestens so gut wie Länge 6).

  2. Bewertung des Wortinhalts. Ich benutze das Wörterbuch, um die Länge der linken und rechten Wörter in einem Domainnamen zu bestimmen. Beispielsweise,myawesomesite -> my & site -> 2 & 4 . Dann versuche ich, eine Anpassung basierend auf dem Anteil dieser Wörter am Domain-Namen vorzunehmen. Niedrige Werte weisen normalerweise darauf hin, dass die Domain kein Wort enthält, ein pluralisiertes / modifiziertes Wort, das nicht im Wörterbuch enthalten ist, ein Wort enthält, das von anderen Zeichen umgeben ist (interne Wörter werden nicht erkannt, obwohl ich dies ohne Verbesserung versucht habe), oder ein Mehrwortphrase. Hohe Werte weisen darauf hin, dass es sich um ein einzelnes Wort oder wahrscheinlich um eine Phrase mit zwei Wörtern handelt.

  3. Bewertung des Charakters Inhalt. Ich suchte nach Teilzeichenfolgen, die in vielen Domänen enthalten waren und die Werte der Domäne zu beeinflussen schienen. Ich glaube, dies wird durch bestimmte Arten von Wörtern verursacht, die aus verschiedenen Gründen populärer / attraktiver sind. Zum Beispiel itauchte der Buchstabe in etwa der Hälfte der Domains auf (741 davon) und erhöht den Domain-Wert im Durchschnitt um etwa 12%. Das ist nicht übertrieben. Da ist etwas Reales, das ich nicht ganz verstehe. Der Brief lerscheint in 514 Domains und hat einen Faktor von 0,84. Einige der weniger gebräuchlichen Buchstaben / Digraphen, wie nesie 125-mal vorkamen und einen wirklich niedrigen Faktor von 0,56 aufwiesen, könnten überpassend sein.

Um dieses Programm zu verbessern, müsste ich wahrscheinlich maschinelles Lernen anwenden. Außerdem könnte ich nach Beziehungen zwischen Länge, Wortinhalt und Zeicheninhalt suchen, um bessere Möglichkeiten zu finden, diese getrennten Ergebnisse in den Gesamtbewertungswert zu kombinieren.

PhiNotPi
quelle